diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py
index b81ac4dc690105508c62ebb5320bda7776cb2bbf..745c83dd26fbae39e27900b141f5ad787f71e885 100644
--- a/src/device/service/DeviceServiceServicerImpl.py
+++ b/src/device/service/DeviceServiceServicerImpl.py
@@ -36,7 +36,7 @@ from .Tools import (
     check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules,
     deconfigure_rules, get_device_controller_uuid, populate_config_rules,
     populate_endpoint_monitoring_resources, populate_endpoints, populate_initial_config_rules,
-    subscribe_kpi, unsubscribe_kpi, update_endpoints
+    subscribe_kpi, unsubscribe_kpi, update_endpoints, update_sap_id,
 )
 
 LOGGER = logging.getLogger(__name__)
@@ -54,6 +54,7 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
         self.monitoring_loops = monitoring_loops
         self.mutex_queues = MutexQueues()
         LOGGER.debug('Servicer Created')
+        self.sap_id =0 
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def AddDevice(self, request : Device, context : grpc.ServicerContext) -> DeviceId:
@@ -91,6 +92,9 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
         device_uuid = device.device_id.device_uuid.uuid
         device_name = device.name
 
+        update_sap_id(device, self.sap_id)
+        self.sap_id += 1
+
         t2 = time.time()
 
         self.mutex_queues.add_alias(device_uuid, device_name)
diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py
index ee683853676b34f256ff335fffe3600823e2c070..eace134eafce5b0b188062349076512b7069e71c 100644
--- a/src/device/service/Tools.py
+++ b/src/device/service/Tools.py
@@ -554,3 +554,23 @@ def extract_resources(config : dict, device : Device) -> list[list[dict], dict]:
             resources.append({'resource_key': 'upper-frequency', 'value': upper_frequency})
 
     return [resources, conditions]
+
+def update_sap_id(device: Device, sap_id: int) -> None:
+
+    found = False
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') == 'custom' and config_rule.custom.resource_key == '_connect/settings':
+            try:
+                settings = json.loads(config_rule.custom.resource_value)
+            except ValueError:
+                settings = {}
+            settings['sap_id'] = str(sap_id)
+            config_rule.custom.resource_value = json.dumps(settings)
+            found = True
+            break
+    if not found:
+        new_rule = device.device_config.config_rules.add()
+        new_rule.action = ConfigActionEnum.CONFIGACTION_SET
+        new_rule.custom.resource_key = '_connect/settings'
+        settings = {'sap_id': str(sap_id)}
+        new_rule.custom.resource_value = json.dumps(settings)
diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index 89432fac260d2f6523decbded020bf54eceb13e5..594cc51f4330c44f2be8eebebade9ff1af158d93 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -282,6 +282,7 @@ class OpenConfigDriver(_Driver):
         self.__out_samples = queue.Queue()
         self.__netconf_handler = NetconfSessionHandler(self.address, self.port, **(self.settings))
         self.__samples_cache = SamplesCache(self.__netconf_handler, self.__logger)
+        self.sap_id = 0  # Initialize sap_id to zero
 
     def Connect(self) -> bool:
         with self.__lock:
@@ -328,6 +329,7 @@ class OpenConfigDriver(_Driver):
                     MSG = 'Exception retrieving {:s}: {:s}'
                     self.__logger.exception(MSG.format(str_resource_name, str(resource_key)))
                     results.append((resource_key, e)) # if validation fails, store the exception
+        self.sap_id += 1
         return results
 
     @metered_subclass_method(METRICS_POOL)
diff --git a/src/device/service/drivers/openconfig/templates/Interfaces.py b/src/device/service/drivers/openconfig/templates/Interfaces.py
index e8ca15116d5de853a3730c20e89146c570df8d02..26213abc33891ac67209e1481512e8502723fac1 100644
--- a/src/device/service/drivers/openconfig/templates/Interfaces.py
+++ b/src/device/service/drivers/openconfig/templates/Interfaces.py
@@ -26,6 +26,7 @@ XPATH_IPV6ADDRESSES = ".//ociip:ipv6/ociip:addresses/ociip:address"
 
 def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]:
     response = []
+    sap_interface_counter = 0
     for xml_interface in xml_data.xpath(XPATH_INTERFACES, namespaces=NAMESPACES):
         #LOGGER.info('xml_interface = {:s}'.format(str(ET.tostring(xml_interface))))
 
@@ -43,7 +44,13 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]:
         interface_name = xml_interface.find('oci:name', namespaces=NAMESPACES)
         if interface_name is None or interface_name.text is None: continue
         add_value_from_tag(interface, 'name', interface_name)
-            
+
+        sap_interface = ET.Element('dummy')
+        sap_interface.text =str(sap_interface_counter) 
+        aux =str(sap_interface_counter) 
+        add_value_from_tag(interface, 'sap_id', sap_interface)
+        sap_interface_counter += 1
+        
         # Get the type of interface according to the vendor's type
         if 'ianaift:' in interface_type.text:
             interface_type.text = interface_type.text.replace('ianaift:', '')                       #ADVA
@@ -57,6 +64,8 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]:
         interface_description = xml_interface.find('oci:config/oci:description', namespaces=NAMESPACES)
         add_value_from_tag(interface, 'description', interface_description)
 
+        sap_subinterface_counter = 65 
+        
         for xml_subinterface in xml_interface.xpath(XPATH_SUBINTERFACES, namespaces=NAMESPACES):
             #LOGGER.info('xml_subinterface = {:s}'.format(str(ET.tostring(xml_subinterface))))
 
@@ -74,6 +83,12 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]:
             vlan_id = xml_subinterface.find('ocv:vlan/ocv:match/ocv:single-tagged/ocv:config/ocv:vlan-id', namespaces=NAMESPACES)
             add_value_from_tag(subinterface, 'vlan_id', vlan_id, cast=int)
 
+            sap_subinterface = ET.Element('dummy')
+            value = (aux  + chr(sap_subinterface_counter))
+            sap_subinterface.text = value
+            add_value_from_tag(subinterface, 'sap_id', sap_subinterface)
+            sap_subinterface_counter += 1
+
             # TODO: implement support for multiple IP addresses per subinterface
             #ipv4_addresses = []
             for xml_ipv4_address in xml_subinterface.xpath(XPATH_IPV4ADDRESSES, namespaces=NAMESPACES):
diff --git a/src/device/service/drivers/openconfig/templates/Tools.py b/src/device/service/drivers/openconfig/templates/Tools.py
index 3adc908b3afb4b200fa10dc588bf09c9799820b2..b2a212cf7fbb3eb51364f144098d2931b18c1f9a 100644
--- a/src/device/service/drivers/openconfig/templates/Tools.py
+++ b/src/device/service/drivers/openconfig/templates/Tools.py
@@ -87,4 +87,4 @@ def generate_templates(resource_key: str, resource_value: str, delete: bool,vend
         if "acl_ruleset" in resource_key:                                               # acl rules management
             result_templates.extend(acl_mgmt(resource_value,vendor, delete))
 
-    return result_templates
\ No newline at end of file
+    return result_templates
diff --git a/src/nbi/service/__main__.py b/src/nbi/service/__main__.py
index 1d470f4eac30795e2272c9145baf947f3c982ba5..3e98cdfa91d7d430d1f96257c2de8394d7110fd0 100644
--- a/src/nbi/service/__main__.py
+++ b/src/nbi/service/__main__.py
@@ -27,6 +27,7 @@ from .rest_server.nbi_plugins.ietf_hardware import register_ietf_hardware
 from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn
 from .rest_server.nbi_plugins.ietf_l3vpn import register_ietf_l3vpn
 from .rest_server.nbi_plugins.ietf_network import register_ietf_network
+from .rest_server.nbi_plugins.ietf_sap_topology import register_ietf_sap_topology
 from .rest_server.nbi_plugins.ietf_network_slice import register_ietf_nss
 from .rest_server.nbi_plugins.ietf_acl import register_ietf_acl
 from .rest_server.nbi_plugins.qkd_app import register_qkd_app
@@ -76,6 +77,7 @@ def main():
     register_ietf_l2vpn(rest_server)  # Registering L2VPN entrypoint
     register_ietf_l3vpn(rest_server)  # Registering L3VPN entrypoint
     register_ietf_network(rest_server)
+    register_ietf_sap_topology(rest_server)
     register_ietf_nss(rest_server)  # Registering NSS entrypoint
     register_ietf_acl(rest_server)
     register_qkd_app(rest_server)
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NameMapping.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NameMapping.py
new file mode 100644
index 0000000000000000000000000000000000000000..03d052afd36d2872c8151d9e260a72e42f8e1017
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NameMapping.py
@@ -0,0 +1,46 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, Tuple
+from common.proto.context_pb2 import Device, DeviceId, EndPoint, EndPointId
+
+class NameMappings:
+    def __init__(self) -> None:
+        self._device_uuid_to_name   : Dict[str,             str] = dict()
+        self._endpoint_uuid_to_name : Dict[Tuple[str, str], str] = dict()
+
+    def store_device_name(self, device : Device) -> None:
+        device_uuid = device.device_id.device_uuid.uuid
+        device_name = device.name
+        self._device_uuid_to_name[device_uuid] = device_name
+        self._device_uuid_to_name[device_name] = device_name
+
+    def store_endpoint_name(self, device : Device, endpoint : EndPoint) -> None:
+        device_uuid = device.device_id.device_uuid.uuid
+        device_name = device.name
+        endpoint_uuid = endpoint.endpoint_id.endpoint_uuid.uuid
+        endpoint_name = endpoint.name
+        self._endpoint_uuid_to_name[(device_uuid, endpoint_uuid)] = endpoint_name
+        self._endpoint_uuid_to_name[(device_name, endpoint_uuid)] = endpoint_name
+        self._endpoint_uuid_to_name[(device_uuid, endpoint_name)] = endpoint_name
+        self._endpoint_uuid_to_name[(device_name, endpoint_name)] = endpoint_name
+
+    def get_device_name(self, device_id : DeviceId) -> str:
+        device_uuid = device_id.device_uuid.uuid
+        return self._device_uuid_to_name.get(device_uuid, device_uuid)
+
+    def get_endpoint_name(self, endpoint_id : EndPointId) -> str:
+        device_uuid = endpoint_id.device_id.device_uuid.uuid
+        endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+        return self._endpoint_uuid_to_name.get((device_uuid, endpoint_uuid), endpoint_uuid)
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NetworkTypeEnum.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NetworkTypeEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..849252b99a8eaa4118a77debe6ce18ffadad11b4
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/NetworkTypeEnum.py
@@ -0,0 +1,23 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from enum import Enum
+from typing import Optional
+
+class NetworkTypeEnum(Enum):
+    TE_OTN_TOPOLOGY      = 'otn'
+    TE_ETH_TRAN_TOPOLOGY = 'eth-tran'
+
+def get_network_topology_type(topology_id : str) -> Optional[NetworkTypeEnum]:
+    return NetworkTypeEnum._value2member_map_.get(topology_id)
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/Networks.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/Networks.py
new file mode 100644
index 0000000000000000000000000000000000000000..253338eac6d0a46efe752898d231c74b92a3b003
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/Networks.py
@@ -0,0 +1,85 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 enum, json, logging
+import pyangbind.lib.pybindJSON as pybindJSON
+from flask import request
+from flask.json import jsonify
+from flask_restful import Resource
+from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
+from common.Settings import get_setting
+from common.proto.context_pb2 import ContextId, Empty
+from common.tools.context_queries.Topology import get_topology_details
+from common.tools.object_factory.Context import json_context_id
+from context.client.ContextClient import ContextClient
+from nbi.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from nbi.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_OK, HTTP_SERVERERROR
+from .YangHandler import YangHandler
+
+LOGGER = logging.getLogger(__name__)
+
+TE_TOPOLOGY_NAMES = [
+    'providerId-10-clientId-0-topologyId-1',
+    'providerId-10-clientId-0-topologyId-2'
+]
+
+class Renderer(enum.Enum):
+    LIBYANG   = 'LIBYANG'
+    PYANGBIND = 'PYANGBIND'
+
+DEFAULT_RENDERER = Renderer.LIBYANG
+USE_RENDERER = get_setting('IETF_NETWORK_RENDERER', default=DEFAULT_RENDERER.value)
+
+
+class Networks(Resource):
+    @HTTP_AUTH.login_required
+    def get(self):
+        LOGGER.info('Request: {:s}'.format(str(request)))
+        topology_id = ''
+        try:
+            context_client = ContextClient()
+
+            if USE_RENDERER == Renderer.LIBYANG.value:
+                yang_handler = YangHandler()
+                json_response = []
+
+                contexts = context_client.ListContexts(Empty()).contexts
+                context_names = [context.name for context in contexts]
+                LOGGER.info(f'Contexts detected: {context_names}')
+
+                for context_name in context_names:
+                    topologies = context_client.ListTopologies(ContextId(**json_context_id(context_name))).topologies
+                    topology_names = [topology.name for topology in topologies]
+                    LOGGER.info(f'Topologies detected for context {context_name}: {topology_names}')
+
+                    for topology_name in topology_names:
+                        topology_details = get_topology_details(context_client, topology_name, context_name)
+                        if topology_details is None:
+                            raise Exception(f'Topology({context_name}/{topology_name}) not found')
+
+                        network_reply = yang_handler.compose_network(topology_name, topology_details)
+                        json_response.append(network_reply)
+
+                yang_handler.destroy()
+            else:
+                raise Exception('Unsupported Renderer: {:s}'.format(str(USE_RENDERER)))
+
+            response = jsonify(json_response)
+            response.status_code = HTTP_OK
+
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Retrieving Topology({:s})'.format(str(topology_id)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/README.md b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..8d808a45b54efa3126c408bda97b51659b511cee
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/README.md
@@ -0,0 +1,14 @@
+# IETF Network
+
+This NBI plugin implements a basic skeleton for the IETF Network data model.
+
+## DISCLAIMER
+__USE WITH CARE! This plugin is NOT production ready, it contains many hardcodings based on ongoing tests.__
+
+## IETF RFCs/drafts:
+- RFC 8795 - YANG Data Model for Traffic Engineering (TE) Topologies (https://datatracker.ietf.org/doc/html/rfc8795)
+- RFC 8776 - Common YANG Data Types for Traffic Engineering (https://datatracker.ietf.org/doc/html/rfc8776)
+- RFC 8345 - A YANG Data Model for Network Topologies (https://datatracker.ietf.org/doc/html/rfc8345)
+- RFC 6991 - Common YANG Data Types (https://datatracker.ietf.org/doc/html/rfc6991)
+- RFC draft-ietf-ccamp-eth-client-te-topo-yang-05 - A YANG Data Model for Ethernet TE Topology (https://datatracker.ietf.org/doc/draft-ietf-ccamp-eth-client-te-topo-yang/)
+- RFC draft-ietf-ccamp-client-signal-yang-10 - A YANG Data Model for Transport Network Client Signals (https://datatracker.ietf.org/doc/draft-ietf-ccamp-client-signal-yang/)
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/SAP_Topology.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/SAP_Topology.py
new file mode 100644
index 0000000000000000000000000000000000000000..98445a76b11c79ee0ea2042c1e92c664995bec2b
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/SAP_Topology.py
@@ -0,0 +1,86 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 enum, json, logging
+import pyangbind.lib.pybindJSON as pybindJSON
+from flask import request
+from flask.json import jsonify
+from flask_restful import Resource
+from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
+from common.Settings import get_setting
+from common.proto.context_pb2 import ContextId, Empty
+from common.tools.context_queries.Topology import get_topology_details
+from common.tools.object_factory.Context import json_context_id
+from context.client.ContextClient import ContextClient
+from nbi.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from nbi.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_OK, HTTP_SERVERERROR
+from .YangHandler import YangHandler
+
+LOGGER = logging.getLogger(__name__)
+
+TE_TOPOLOGY_NAMES = [
+    'providerId-10-clientId-0-topologyId-1',
+    'providerId-10-clientId-0-topologyId-2'
+]
+
+class Renderer(enum.Enum):
+    LIBYANG   = 'LIBYANG'
+    PYANGBIND = 'PYANGBIND'
+
+DEFAULT_RENDERER = Renderer.LIBYANG
+USE_RENDERER = get_setting('IETF_NETWORK_RENDERER', default=DEFAULT_RENDERER.value)
+
+
+class SAP_Topology(Resource):
+    @HTTP_AUTH.login_required
+    def get(self):
+        LOGGER.info('Request: {:s}'.format(str(request)))
+        topology_id = ''
+        try:
+            context_client = ContextClient()
+
+            
+            if USE_RENDERER == Renderer.LIBYANG.value:
+                yang_handler = YangHandler()
+                json_response = []
+
+                contexts = context_client.ListContexts(Empty()).contexts
+                context_names = [context.name for context in contexts]
+                LOGGER.info(f'Contexts detected: {context_names}')
+
+                for context_name in context_names:
+                    topologies = context_client.ListTopologies(ContextId(**json_context_id(context_name))).topologies
+                    topology_names = [topology.name for topology in topologies]
+                    LOGGER.info(f'Topologies detected for context {context_name}: {topology_names}')
+
+                    for topology_name in topology_names:
+                        topology_details = get_topology_details(context_client, topology_name, context_name)
+                        if topology_details is None:
+                            raise Exception(f'Topology({context_name}/{topology_name}) not found')
+
+                        network_reply = yang_handler.compose_network(topology_name, topology_details)
+                        json_response.append(network_reply)
+
+                yang_handler.destroy()
+            else:
+                raise Exception('Unsupported Renderer: {:s}'.format(str(USE_RENDERER)))
+
+            response = jsonify(json_response)
+            response.status_code = HTTP_OK
+
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Retrieving Topology({:s})'.format(str(topology_id)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/YangHandler.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/YangHandler.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ee82a37de9e68bead1aeba97bad7275c243efda
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/YangHandler.py
@@ -0,0 +1,176 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 json
+import libyang, logging, os
+from typing import Any
+from common.proto.context_pb2 import TopologyDetails, Device, Link
+from .NameMapping import NameMappings
+from context.client.ContextClient import ContextClient
+from common.tools.object_factory.Device import json_device_id
+from common.proto.context_pb2 import DeviceId
+
+LOGGER = logging.getLogger(__name__)
+
+YANG_DIR = os.path.join(os.path.dirname(__file__), 'yang')
+YANG_MODULES = ['ietf-network', 'ietf-network-topology', 'ietf-l3-unicast-topology', 'ietf-sap-ntw', 'ietf-vpn-common']
+
+class YangHandler:
+    def __init__(self) -> None:
+        self._yang_context = libyang.Context(YANG_DIR)
+        for yang_module_name in YANG_MODULES:
+            LOGGER.info('Loading module: {:s}'.format(str(yang_module_name)))
+            self._yang_context.load_module(yang_module_name).feature_enable_all()
+
+
+
+    def compose_network(self, te_topology_name: str, topology_details: TopologyDetails) -> dict:
+        networks = self._yang_context.create_data_path('/ietf-network:networks')
+
+
+        network = networks.create_path(f'network[network-id="{te_topology_name}"]')
+        network.create_path('network-id', te_topology_name)
+
+        network_types = network.create_path('network-types')
+        sap_network = network_types.create_path('ietf-sap-ntw:sap-network')
+
+
+        available_services = ["ietf-vpn-common:l3vpn"] #no se muy bien como coger todos los servicios disponibles
+        
+        for service in available_services:
+            sap_network.create_path('service-type', service)  #no se muy bien como coger todos los servicios disponibles
+
+        connected_tps = set()  # Conjunto local para TPs conectados
+        name_mappings = NameMappings()
+
+        # Depuración inicial
+        LOGGER.info(f"Procesando topology_details: {len(topology_details.devices)} devices, {len(topology_details.links)} links.")
+
+
+
+        if topology_details.links:
+            for link in topology_details.links:
+                source_name = name_mappings.get_endpoint_name(link.link_endpoint_ids[0])
+                dest_name = name_mappings.get_endpoint_name(link.link_endpoint_ids[-1])
+                connected_tps.add(source_name)
+                connected_tps.add(dest_name)
+
+
+        if topology_details.devices:
+            for device in topology_details.devices:
+                self.compose_node(device, name_mappings, network, connected_tps)
+
+
+
+
+        return json.loads(networks.print_mem('json'))
+
+
+        
+    def compose_node(self, dev: Device, name_mappings: NameMappings, network: Any, connected_tps: set) -> None:      
+
+
+
+        device_name = dev.name
+        name_mappings.store_device_name(dev)
+
+        context_client = ContextClient()
+        device = context_client.GetDevice(DeviceId(**json_device_id(device_name)))
+    
+        
+        for config in device.device_config.config_rules:
+            if config.WhichOneof('config_rule') == 'custom' and config.custom.resource_key == '_connect/settings':
+                try:
+                    settings_data = json.loads(config.custom.resource_value)
+                    sap_device = settings_data.get('sap_id') 
+                except ValueError:
+                    sap_device = "ERROR"
+                break 
+        sap_device = "SAP"+ str(sap_device)
+
+        node = network.create_path(f'node[node-id="{sap_device}"]')
+        node.create_path('node-id', sap_device)
+
+    
+
+
+        for endpoint in device.device_endpoints:
+            name_mappings.store_endpoint_name(dev, endpoint)
+            #LOGGER.info(f"Métodos disponibles en 'endpoint': {dir(endpoint)}")
+
+        
+
+        self._process_device_config(device, node, connected_tps, sap_device)
+
+
+   
+    
+    def _process_device_config(self, device: Device, node: Any, connected_tps: set, sap_device: str) -> None:
+        #sLOGGER.info(f"Métodos disponibles en 'node': {dir(node)}")
+        #LOGGER.info(f"Métodos disponibles en 'nedevice': {dir(device)}")
+        sap_device = sap_device
+
+                
+        for config in device.device_config.config_rules:
+
+            if config.WhichOneof('config_rule') != 'custom' or '/interface[' not in config.custom.resource_key:
+                continue
+            
+            for endpoint in device.device_endpoints:
+                endpoint_name = endpoint.name
+                if endpoint.endpoint_id.endpoint_uuid.uuid in connected_tps:
+                    continue
+                if f'/interface[{endpoint_name}]' in config.custom.resource_key or f'/interface[{endpoint_name}.' in config.custom.resource_key:
+                    self._create_termination_point(node, sap_device, config.custom.resource_value)
+
+    
+    
+    def _create_termination_point(self, node: Any, sap_device: str, resource_value: str) -> None:
+        config_data = json.loads(resource_value)
+        ip_addresses = self._extract_ip_addresses(config_data)
+        if ip_addresses:
+            #tp = node.create_path(f'ietf-network-topology:termination-point[tp-id="{interface_name}"]')
+            service = node.create_path(f'ietf-sap-ntw:service[service-type="ietf-vpn-common:l3vpn"]')
+
+            sap_id_value = config_data.get('sap_id', "ERROR")
+            final_sap_id = f"SAP{sap_device}-{sap_id_value}"
+
+            sap = service.create_path(f'sap[sap-id="{final_sap_id}"]')
+            #sap.create_path('peer-sap-id', interface_name)
+            sap.create_path('peer-sap-id', "NOT IMPLEMENTED")
+
+            sap_status = sap.create_path('sap-status')
+            sap_status.create_path('status', "ietf-vpn-common:op-up") #NOT IMPLEMENTED
+
+            service_status = sap.create_path('service-status')
+            admin_status = service_status.create_path('admin-status')
+            oper_status = service_status.create_path('oper-status')
+            admin_status.create_path('status', "ietf-vpn-common:admin-up") #NOT IMPLEMENTED
+            oper_status.create_path('status', "ietf-vpn-common:op-up") #NOT IMPLEMENTED
+
+
+
+    @staticmethod
+
+    def _extract_ip_addresses(resource_value: dict) -> list:
+        ip_addresses = []
+        if 'address_ip' in resource_value:
+            ip_addresses.append(resource_value['address_ip'])
+        if 'address_ipv6' in resource_value:
+            ip_addresses.append(resource_value['address_ipv6'])
+        return ip_addresses
+
+
+    def destroy(self) -> None:
+        self._yang_context.destroy()
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/__init__.py b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..57377961038d9d8c96ecac0f28a06f6cab718c6c
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/__init__.py
@@ -0,0 +1,44 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8795 - YANG Data Model for Traffic Engineering (TE) Topologies
+# Ref: https://datatracker.ietf.org/doc/html/rfc8795
+
+# RFC 8776 - Common YANG Data Types for Traffic Engineering
+# Ref: https://datatracker.ietf.org/doc/html/rfc8776
+
+# RFC 8345 - A YANG Data Model for Network Topologies
+# Ref: https://datatracker.ietf.org/doc/html/rfc8345
+
+# RFC 6991 - Common YANG Data Types
+# Ref: https://datatracker.ietf.org/doc/html/rfc6991
+
+# RFC draft-ietf-ccamp-eth-client-te-topo-yang-05 - A YANG Data Model for Ethernet TE Topology
+# Ref: https://datatracker.ietf.org/doc/draft-ietf-ccamp-eth-client-te-topo-yang/
+
+# RFC draft-ietf-ccamp-client-signal-yang-10 - A YANG Data Model for Transport Network Client Signals
+# Ref: https://datatracker.ietf.org/doc/draft-ietf-ccamp-client-signal-yang/
+
+from flask_restful import Resource
+from nbi.service.rest_server.RestServer import RestServer
+from .SAP_Topology import SAP_Topology
+
+URL_PREFIX = '/restconf/data/ietf-network:networks'
+
+def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs):
+    urls = [(URL_PREFIX + url) for url in urls]
+    rest_server.add_resource(resource, *urls, **kwargs)
+
+def register_ietf_sap_topology(rest_server : RestServer):
+    _add_resource(rest_server, SAP_Topology, '/sap')
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/build-yang-bindings.sh b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/build-yang-bindings.sh
new file mode 100755
index 0000000000000000000000000000000000000000..efb3d6ba24a896ec1a01823cbdb3ab8a639a08c3
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/build-yang-bindings.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+BASE_PATH=~/tfs-ctrl/src/nbi/service/rest_server/nbi_plugins/ietf_network
+IETF_MODELS_PATH=${BASE_PATH}/yang
+
+cd ${BASE_PATH}
+export PYBINDPLUGIN=`/usr/bin/env python -c 'import pyangbind; import os; print ("{}/plugin".format(os.path.dirname(pyangbind.__file__)))'`
+
+rm -rf bindings
+
+# -p ${OC_HERCULES_MODELS_PATH}/
+# --split-class-dir openconfig_hercules
+# --presence
+pyang --plugindir $PYBINDPLUGIN -p ${IETF_MODELS_PATH}/ -f pybind --split-class-dir bindings \
+    ${IETF_MODELS_PATH}/ietf-network-topology@2018-02-26.yang \
+    ${IETF_MODELS_PATH}/ietf-network@2018-02-26.yang          \
+    ${IETF_MODELS_PATH}/ietf-te-topology@2020-08-06.yang      \
+    ${IETF_MODELS_PATH}/ietf-otn-topology@2023-07-06.yang     \
+    ${IETF_MODELS_PATH}/ietf-eth-te-topology@2023-09-28.yang  \
+    ${IETF_MODELS_PATH}/ietf-vpn-common@2022-02-11.yang        \
+    ${IETF_MODELS_PATH}/ietf-sap-ntw@2023-06-20.yang     
+    
+
+
+#    ${IETF_MODELS_PATH}/iana-routing-types@2017-12-04.yang    \
+#    ${IETF_MODELS_PATH}/ietf-inet-types@2013-07-15.yang       \
+#    ${IETF_MODELS_PATH}/ietf-layer1-types@2022-10-14.yang     \
+#    ${IETF_MODELS_PATH}/ietf-routing-types@2017-12-04.yang    \
+#    ${IETF_MODELS_PATH}/ietf-te-packet-types@2020-06-10.yang  \
+#    ${IETF_MODELS_PATH}/ietf-te-types@2020-06-10.yang         \
+#    ${IETF_MODELS_PATH}/ietf-yang-types@2013-07-15.yang       \
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/iana-routing-types@2017-12-04.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/iana-routing-types@2017-12-04.yang
new file mode 100644
index 0000000000000000000000000000000000000000..250cba4b695e269116e181b46226bae7dab7604d
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/iana-routing-types@2017-12-04.yang
@@ -0,0 +1,473 @@
+   module iana-routing-types {
+     namespace "urn:ietf:params:xml:ns:yang:iana-routing-types";
+     prefix iana-rt-types;
+
+     organization
+       "IANA";
+     contact
+       "Internet Assigned Numbers Authority
+
+        Postal: ICANN
+                12025 Waterfront Drive, Suite 300
+                Los Angeles, CA  90094-2536
+                United States of America
+        Tel:    +1 310 301 5800
+        <mailto:iana@iana.org>";
+
+     description
+       "This module contains a collection of YANG data types
+        considered defined by IANA and used for routing
+        protocols.
+
+        Copyright (c) 2017 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC 8294; see
+        the RFC itself for full legal notices.";
+
+      revision 2017-12-04 {
+        description "Initial revision.";
+        reference
+          "RFC 8294: Common YANG Data Types for the Routing Area.
+           Section 4.";
+     }
+
+     /*** Collection of IANA types related to routing ***/
+     /*** IANA Address Family enumeration ***/
+
+     typedef address-family {
+       type enumeration {
+         enum ipv4 {
+           value 1;
+           description
+             "IPv4 Address Family.";
+         }
+
+         enum ipv6 {
+           value 2;
+           description
+             "IPv6 Address Family.";
+         }
+
+         enum nsap {
+           value 3;
+           description
+             "OSI Network Service Access Point (NSAP) Address Family.";
+         }
+
+         enum hdlc {
+           value 4;
+           description
+             "High-Level Data Link Control (HDLC) Address Family.";
+         }
+
+         enum bbn1822 {
+           value 5;
+           description
+             "Bolt, Beranek, and Newman Report 1822 (BBN 1822)
+              Address Family.";
+         }
+
+         enum ieee802 {
+           value 6;
+           description
+             "IEEE 802 Committee Address Family
+              (aka Media Access Control (MAC) address).";
+         }
+
+         enum e163 {
+           value 7;
+           description
+             "ITU-T E.163 Address Family.";
+         }
+
+         enum e164 {
+           value 8;
+           description
+             "ITU-T E.164 (Switched Multimegabit Data Service (SMDS),
+              Frame Relay, ATM) Address Family.";
+         }
+
+         enum f69 {
+           value 9;
+           description
+             "ITU-T F.69 (Telex) Address Family.";
+         }
+
+         enum x121 {
+           value 10;
+           description
+             "ITU-T X.121 (X.25, Frame Relay) Address Family.";
+         }
+
+         enum ipx {
+           value 11;
+           description
+             "Novell Internetwork Packet Exchange (IPX)
+              Address Family.";
+         }
+
+         enum appletalk {
+           value 12;
+           description
+             "Apple AppleTalk Address Family.";
+         }
+
+         enum decnet-iv {
+           value 13;
+           description
+             "Digital Equipment DECnet Phase IV Address Family.";
+         }
+
+         enum vines {
+           value 14;
+           description
+             "Banyan Vines Address Family.";
+         }
+
+         enum e164-nsap {
+           value 15;
+           description
+             "ITU-T E.164 with NSAP sub-address Address Family.";
+         }
+
+         enum dns {
+           value 16;
+           description
+             "Domain Name System (DNS) Address Family.";
+         }
+
+         enum distinguished-name {
+           value 17;
+           description
+             "Distinguished Name Address Family.";
+         }
+
+         enum as-num {
+           value 18;
+           description
+             "Autonomous System (AS) Number Address Family.";
+         }
+
+         enum xtp-v4 {
+           value 19;
+           description
+             "Xpress Transport Protocol (XTP) over IPv4
+              Address Family.";
+         }
+
+         enum xtp-v6 {
+           value 20;
+           description
+             "XTP over IPv6 Address Family.";
+         }
+
+         enum xtp-native {
+           value 21;
+           description
+             "XTP native mode Address Family.";
+         }
+
+         enum fc-port {
+           value 22;
+           description
+             "Fibre Channel (FC) World-Wide Port Name Address Family.";
+         }
+
+         enum fc-node {
+           value 23;
+           description
+             "FC World-Wide Node Name Address Family.";
+         }
+
+         enum gwid {
+           value 24;
+           description
+             "ATM Gateway Identifier (GWID) Number Address Family.";
+         }
+
+         enum l2vpn {
+           value 25;
+           description
+             "Layer 2 VPN (L2VPN) Address Family.";
+         }
+
+         enum mpls-tp-section-eid {
+           value 26;
+           description
+             "MPLS Transport Profile (MPLS-TP) Section Endpoint
+              Identifier Address Family.";
+         }
+
+         enum mpls-tp-lsp-eid {
+           value 27;
+           description
+             "MPLS-TP Label Switched Path (LSP) Endpoint Identifier
+              Address Family.";
+         }
+
+         enum mpls-tp-pwe-eid {
+           value 28;
+           description
+             "MPLS-TP Pseudowire Endpoint Identifier Address Family.";
+         }
+
+         enum mt-v4 {
+           value 29;
+           description
+             "Multi-Topology IPv4 Address Family.";
+         }
+
+         enum mt-v6 {
+           value 30;
+           description
+             "Multi-Topology IPv6 Address Family.";
+         }
+
+         enum eigrp-common-sf {
+           value 16384;
+           description
+             "Enhanced Interior Gateway Routing Protocol (EIGRP)
+              Common Service Family Address Family.";
+         }
+
+         enum eigrp-v4-sf {
+           value 16385;
+           description
+             "EIGRP IPv4 Service Family Address Family.";
+         }
+
+         enum eigrp-v6-sf {
+           value 16386;
+           description
+             "EIGRP IPv6 Service Family Address Family.";
+         }
+
+         enum lcaf {
+           value 16387;
+           description
+             "Locator/ID Separation Protocol (LISP)
+              Canonical Address Format (LCAF) Address Family.";
+         }
+
+         enum bgp-ls {
+           value 16388;
+           description
+             "Border Gateway Protocol - Link State (BGP-LS)
+              Address Family.";
+         }
+
+         enum mac-48 {
+           value 16389;
+           description
+             "IEEE 48-bit MAC Address Family.";
+         }
+
+         enum mac-64 {
+           value 16390;
+           description
+             "IEEE 64-bit MAC Address Family.";
+         }
+
+         enum trill-oui {
+           value 16391;
+           description
+             "Transparent Interconnection of Lots of Links (TRILL)
+              IEEE Organizationally Unique Identifier (OUI)
+              Address Family.";
+         }
+
+         enum trill-mac-24 {
+           value 16392;
+           description
+             "TRILL final 3 octets of 48-bit MAC Address Family.";
+         }
+
+         enum trill-mac-40 {
+           value 16393;
+           description
+             "TRILL final 5 octets of 64-bit MAC Address Family.";
+         }
+
+         enum ipv6-64 {
+           value 16394;
+           description
+             "First 8 octets (64 bits) of IPv6 address
+              Address Family.";
+         }
+
+         enum trill-rbridge-port-id {
+           value 16395;
+           description
+             "TRILL Routing Bridge (RBridge) Port ID Address Family.";
+         }
+
+         enum trill-nickname {
+           value 16396;
+           description
+             "TRILL Nickname Address Family.";
+         }
+       }
+
+       description
+         "Enumeration containing all the IANA-defined
+          Address Families.";
+
+     }
+
+     /*** Subsequent Address Family Identifiers (SAFIs) ***/
+     /*** for multiprotocol BGP enumeration ***/
+
+     typedef bgp-safi {
+       type enumeration {
+         enum unicast-safi {
+           value 1;
+           description
+             "Unicast SAFI.";
+         }
+
+         enum multicast-safi {
+           value 2;
+           description
+             "Multicast SAFI.";
+         }
+
+         enum labeled-unicast-safi {
+           value 4;
+           description
+             "Labeled Unicast SAFI.";
+         }
+
+         enum multicast-vpn-safi {
+           value 5;
+           description
+             "Multicast VPN SAFI.";
+         }
+
+         enum pseudowire-safi {
+           value 6;
+           description
+             "Multi-segment Pseudowire VPN SAFI.";
+         }
+
+         enum tunnel-encap-safi {
+           value 7;
+           description
+             "Tunnel Encap SAFI.";
+         }
+
+         enum mcast-vpls-safi {
+           value 8;
+           description
+             "Multicast Virtual Private LAN Service (VPLS) SAFI.";
+         }
+
+         enum tunnel-safi {
+           value 64;
+           description
+             "Tunnel SAFI.";
+         }
+
+         enum vpls-safi {
+           value 65;
+           description
+             "VPLS SAFI.";
+         }
+
+         enum mdt-safi {
+           value 66;
+           description
+             "Multicast Distribution Tree (MDT) SAFI.";
+         }
+
+         enum v4-over-v6-safi {
+           value 67;
+           description
+             "IPv4 over IPv6 SAFI.";
+         }
+
+         enum v6-over-v4-safi {
+           value 68;
+           description
+             "IPv6 over IPv4 SAFI.";
+         }
+
+         enum l1-vpn-auto-discovery-safi {
+           value 69;
+           description
+             "Layer 1 VPN Auto-Discovery SAFI.";
+         }
+
+         enum evpn-safi {
+           value 70;
+           description
+             "Ethernet VPN (EVPN) SAFI.";
+         }
+
+         enum bgp-ls-safi {
+           value 71;
+           description
+             "BGP-LS SAFI.";
+         }
+
+         enum bgp-ls-vpn-safi {
+           value 72;
+           description
+             "BGP-LS VPN SAFI.";
+         }
+
+         enum sr-te-safi {
+           value 73;
+           description
+             "Segment Routing - Traffic Engineering (SR-TE) SAFI.";
+         }
+
+         enum labeled-vpn-safi {
+           value 128;
+           description
+             "MPLS Labeled VPN SAFI.";
+         }
+
+         enum multicast-mpls-vpn-safi {
+           value 129;
+           description
+             "Multicast for BGP/MPLS IP VPN SAFI.";
+         }
+
+         enum route-target-safi {
+           value 132;
+           description
+             "Route Target SAFI.";
+         }
+
+         enum ipv4-flow-spec-safi {
+           value 133;
+           description
+             "IPv4 Flow Specification SAFI.";
+         }
+
+         enum vpnv4-flow-spec-safi {
+           value 134;
+           description
+             "IPv4 VPN Flow Specification SAFI.";
+         }
+
+         enum vpn-auto-discovery-safi {
+           value 140;
+           description
+             "VPN Auto-Discovery SAFI.";
+         }
+       }
+       description
+         "Enumeration for BGP SAFI.";
+       reference
+         "RFC 4760: Multiprotocol Extensions for BGP-4.";
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ac-ntw@2024-05-15.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ac-ntw@2024-05-15.yang
new file mode 100644
index 0000000000000000000000000000000000000000..f48e4d76782abe4b3e461a10aa44980734cd00b0
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ac-ntw@2024-05-15.yang
@@ -0,0 +1,2019 @@
+module ietf-ac-ntw {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-ac-ntw";
+  prefix ac-ntw;
+
+  import ietf-vpn-common {
+    prefix vpn-common;
+    reference
+      "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
+                 VPNs";
+  }
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types, Section 4";
+  }
+  import ietf-key-chain {
+    prefix key-chain;
+    reference
+      "RFC 8177: YANG Data Model for Key Chains";
+  }
+  import ietf-routing-types {
+    prefix rt-types;
+    reference
+      "RFC 8294: Common YANG Data Types for the Routing Area";
+  }
+  import ietf-routing-policy {
+    prefix rt-pol;
+    reference
+      "RFC 9067: A YANG Data Model for Routing Policy";
+  }
+  import ietf-interfaces {
+    prefix if;
+    reference
+      "RFC 8343: A YANG Data Model for Interface Management";
+  }
+  import ieee802-dot1q-types {
+    prefix dot1q-types;
+    reference
+      "IEEE Std 802.1Qcp: Bridges and Bridged Networks--
+                          Amendment 30: YANG Data Model";
+  }
+  import ietf-network {
+    prefix nw;
+    reference
+      "RFC 8345: A YANG Data Model for Network Topologies, 
+                 Section 6.1";
+  }
+  import ietf-sap-ntw {
+    prefix sap;
+    reference
+      "RFC 9408: A YANG Network Model for Service Attachment
+                 Points (SAPs)";
+  }
+  import ietf-ac-common {
+    prefix ac-common;
+    reference
+      "RFC CCCC: A Common YANG Data Model for Attachment Circuits";
+  }
+  import ietf-ac-svc {
+    prefix ac-svc;
+    reference
+      "RFC SSSS: YANG Data Models for Bearers and 'Attachment
+                  Circuits'-as-a-Service (ACaaS)";
+  }
+
+  organization
+    "IETF OPSAWG (Operations and Management Area Working Group)";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
+     WG List:  <mailto:opsawg@ietf.org>
+
+     Editor:   Mohamed Boucadair
+               <mailto:mohamed.boucadair@orange.com>
+     Author:   Richard Roberts
+               <mailto:rroberts@juniper.net>
+     Author:   Oscar Gonzalez de Dios
+               <mailto:oscar.gonzalezdedios@telefonica.com>
+     Author:   Samier Barguil
+               <mailto:ssamier.barguil_giraldo@nokia.com>
+     Author:   Bo Wu
+               <mailto:lana.wubo@huawei.com>";
+  description
+    "This YANG module defines a YANG network model for the management
+     of attachment circuits.
+
+     Copyright (c) 2024 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Revised BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see the
+     RFC itself for full legal notices.";
+
+  revision 2024-05-15 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: A YANG Network Data Model for Attachment Circuits";
+  }
+
+  // References
+
+  /* A set of groupings to ease referencing cross-modules */
+
+  grouping attachment-circuit-reference {
+    description
+      "This grouping can be used to reference an attachment circuit
+       in a specific node.";
+    leaf ac-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+          + "network-ref]/nw:node[nw:node-id=current()/../"
+          + "node-ref]/ac-ntw:ac/ac-ntw:name";
+        require-instance false;
+      }
+      description
+        "An absolute reference to an attachment circuit.";
+    }
+    uses nw:node-ref;
+  }
+
+  grouping attachment-circuit-references {
+    description
+      "This grouping can be used to reference a list of attachment
+       circuits in a specific node.";
+    leaf-list ac-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+          + "network-ref]/nw:node[nw:node-id=current()/../"
+          + "node-ref]/ac-ntw:ac/ac-ntw:name";
+        require-instance false;
+      }
+      description
+        "An absolute reference to an attachment circuit.";
+    }
+    uses nw:node-ref;
+  }
+
+  grouping ac-profile-reference {
+    description
+      "This grouping can be used to reference an attachment circuit
+       profile.";
+    leaf ac-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+          + "network-ref]/ac-ntw:ac-profile/ac-ntw:name";
+        require-instance false;
+      }
+      description
+        "An absolute reference to an attachment circuit.";
+    }
+    uses nw:network-ref;
+  }
+
+  grouping encryption-profile-reference {
+    description
+      "This grouping can be used to reference encryption
+       profile.";
+    leaf encryption-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+        + "network-ref]"
+        + "/ac-ntw:specific-provisioning-profiles" 
+        + "/ac-ntw:valid-provider-identifiers"
+        + "/ac-ntw:encryption-profile-identifier/ac-ntw:id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to an encryption profile.";
+    }
+    uses nw:network-ref;
+  }
+
+  grouping qos-profile-reference {
+    description
+      "This grouping can be used to reference a QoS profile.";
+    leaf qos-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+        + "network-ref]"
+        + "/ac-ntw:specific-provisioning-profiles" 
+        + "/ac-ntw:valid-provider-identifiers"
+        + "/ac-ntw:qos-profile-identifier/ac-ntw:id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to a QoS profile.";
+    }
+    uses nw:network-ref;
+  }
+
+  grouping failure-detection-profile-reference {
+    description
+      "This grouping can be used to reference a failure detection
+       profile.";
+    leaf failure-detection-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+        + "network-ref]"
+        + "/ac-ntw:specific-provisioning-profiles" 
+        + "/ac-ntw:valid-provider-identifiers"
+        + "/ac-ntw:failure-detection-profile-identifier/ac-ntw:id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to a failure detection profile.";
+    }
+    uses nw:network-ref;
+  }
+
+  grouping forwarding-profile-reference {
+    description
+      "This grouping can be used to reference a forwarding profile.";
+    leaf forwarding-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+        + "network-ref]"
+        + "/ac-ntw:specific-provisioning-profiles" 
+        + "/ac-ntw:valid-provider-identifiers"
+        + "/ac-ntw:forwarding-profile-identifier/ac-ntw:id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to a forwarding profile.";
+    }
+    uses nw:network-ref;
+  }
+
+  grouping routing-profile-reference {
+    description
+      "This grouping can be used to reference a routing profile.";
+    leaf routing-profile-ref {
+      type leafref {
+        path "/nw:networks/nw:network[nw:network-id=current()/../"
+        + "network-ref]"
+        + "/ac-ntw:specific-provisioning-profiles" 
+        + "/ac-ntw:valid-provider-identifiers"
+        + "/ac-ntw:routing-profile-identifier/ac-ntw:id";
+        require-instance false;
+      }
+      description
+        "An absolute reference to a routing profile.";
+    }
+    uses nw:network-ref;
+  }
+
+  // L2 conenction
+
+  grouping l2-connection {
+    description
+      "Defines Layer 2 protocols and parameters that are required to
+       enable AC connectivity on the network side.";
+    container encapsulation {
+      description
+        "Container for Layer 2 encapsulation.";
+      leaf encap-type {
+        type identityref {
+          base vpn-common:encapsulation-type;
+        }
+        description
+          "Tagged interface type.";
+      }
+      container dot1q {
+        when "derived-from-or-self(../encap-type, "
+           + "'vpn-common:dot1q')" {
+          description
+            "Only applies when the type of the tagged interface is
+             'dot1q'.";
+        }
+        description
+          "Tagged interface.";
+        uses ac-common:dot1q;
+        container tag-operations {
+          description
+            "Sets the tag manipulation policy for this AC. It defines
+             a set of tag manipulations that allow for the insertion,
+             removal, or rewriting of 802.1Q VLAN tags. These
+             operations are indicated for the CE-PE direction.
+             By default, tag operations are symmetric. As such, the
+             reverse tag operation is assumed on the PE-CE 
+             direction.";
+          choice op-choice {
+            description
+              "Selects the tag rewriting policy for an AC.";
+            leaf pop {
+              type empty;
+              description
+                "Pop the outer tag.";
+            }
+            leaf push {
+              type empty;
+              description
+                "Pushes one or two tags defined by the tag-1 and
+                 tag-2 leaves.  It is assumed that, absent any
+                 policy, the default value of 0 will be used for
+                 the PCP  setting.";
+            }
+            leaf translate {
+              type empty;
+              description
+                "Translates the outer tag to one or two tags. PCP 
+                 bits are preserved.";
+            }
+          }
+          leaf tag-1 {
+            when 'not(../pop)';
+            type dot1q-types:vlanid;
+            description
+              "A first tag to be used for push or translate 
+               operations. This tag will be used as the outermost tag
+               as a result of the tag operation.";
+          }
+          leaf tag-1-type {
+            type dot1q-types:dot1q-tag-type;
+            default "dot1q-types:s-vlan";
+            description
+              "Specifies a specific 802.1Q tag type of tag-1.";
+          }
+          leaf tag-2 {
+            when '(../translate)';
+            type dot1q-types:vlanid;
+            description
+              "A second tag to be used for translation.";
+          }
+          leaf tag-2-type {
+            type dot1q-types:dot1q-tag-type;
+            default "dot1q-types:c-vlan";
+            description
+              "Specifies a specific 802.1Q tag type of tag-2.";
+          }
+        }
+      }
+      container priority-tagged {
+        when "derived-from-or-self(../encap-type, "
+           + "'vpn-common:priority-tagged')" {
+          description
+            "Only applies when the type of the tagged interface is
+             'priority-tagged'.";
+        }
+        description
+          "Priority tagged container.";
+        uses ac-common:priority-tagged;
+      }
+      container qinq {
+        when "derived-from-or-self(../encap-type, "
+           + "'vpn-common:qinq')" {
+          description
+            "Only applies when the type of the tagged interface is
+             'QinQ'.";
+        }
+        description
+          "Includes QinQ parameters.";
+        uses ac-common:qinq;
+        container tag-operations {
+          description
+            "Sets the tag manipulation policy for this AC. It defines
+             a set of tag manipulations that allow for the insertion,
+             removal, or rewriting of 802.1Q VLAN tags. These
+             operations are indicated for the CE-PE direction.
+             By default, tag operations are symmetric. As such, the
+             reverse tag operation is assumed on the PE-CE 
+             direction.";
+          choice op-choice {
+            description
+              "Selects the tag rewriting policy for a AC.";
+            leaf pop {
+              type uint8 {
+                range "1|2";
+              }
+              description
+                "Pops one or two tags as a function of the indicated
+                 pop value.";
+            }
+            leaf push {
+              type empty;
+              description
+                "Pushes one or two tags defined by the tag-1 and 
+                 tag-2 leaves. It is assumed that, absent any 
+                 policy, the default value of 0 will be used for 
+                 PCP setting.";
+            }
+            leaf translate {
+              type uint8 {
+                range "1|2";
+              }
+              description
+                "Translates one or two outer tags. PCP bits are 
+                 preserved. The following operations are supported:
+
+                 - translate 1 with tag-1 leaf is provided: only the 
+                   outermost tag is translated to the value in tag-1.
+
+                 - translate 2 with both tag-1 and tag-2 leaves are 
+                   provided: both outer and inner tags are translated
+                   to the values in tag-1 and tag-2, respectively.
+
+                 - translate 2 with tag-1 leaf is provided: the 
+                   outer tag is popped while the inner tag is 
+                   translated to the value in tag-1.";
+            }
+          }
+          leaf tag-1 {
+            when 'not(../pop)';
+            type dot1q-types:vlanid;
+            description
+              "A first tag to be used for push or translate 
+               operations. This tag will be used as the outermost tag
+               as a result of the tag operation.";
+          }
+          leaf tag-1-type {
+            type dot1q-types:dot1q-tag-type;
+            default "dot1q-types:s-vlan";
+            description
+              "Specifies a specific 802.1Q tag type of tag-1.";
+          }
+          leaf tag-2 {
+            when 'not(../pop)';
+            type dot1q-types:vlanid;
+            description
+              "A second tag to be used for push or translate 
+               operations.";
+          }
+          leaf tag-2-type {
+            type dot1q-types:dot1q-tag-type;
+            default "dot1q-types:c-vlan";
+            description
+              "Specifies a specific 802.1Q tag type of tag-2.";
+          }
+        }
+      }
+    }
+    choice l2-service {
+      description
+        "The Layer 2 connectivity service can be provided by 
+         indicating a pointer to an L2VPN or by specifying a Layer 2
+         tunnel service.";
+      container l2-tunnel-service {
+        description
+          "Defines a Layer 2 tunnel termination.";
+        uses ac-common:l2-tunnel-service;
+      }
+      case l2vpn {
+        leaf l2vpn-id {
+          type vpn-common:vpn-id;
+          description
+            "Indicates the L2VPN service associated with an 
+             Integrated Routing and Bridging (IRB) interface.";
+        }
+      }
+    }
+  }
+
+  grouping l2-connection-if-ref {
+    description
+      "Specifies Layer 2 connection paramters with interface 
+       references.";
+    uses l2-connection;
+    leaf l2-termination-point {
+      type string;
+      description
+        "Specifies a reference to a local Layer 2 termination point,
+         such as a Layer 2 sub-interface.";
+    }
+    leaf local-bridge-reference {
+      type string;
+      description
+        "Specifies a local bridge reference to accommodate, e.g.,
+         implementations that require internal bridging.
+         A reference may be a local bridge domain.";
+    }
+    leaf bearer-reference {
+      if-feature "ac-common:server-assigned-reference";
+      type string;
+      description
+        "This is an internal reference for the service provider to
+         identify the bearer associated with this AC.";
+    }
+    container lag-interface {
+      if-feature "vpn-common:lag-interface";
+      description
+        "Container for configuration of Link Aggregation Group (LAG)
+         interface attributes.";
+      leaf lag-interface-id {
+        type string;
+        description
+          "LAG interface identifier.";
+      }
+      container member-link-list {
+        description
+          "Container for the member link list.";
+        list member-link {
+          key "name";
+          description
+            "Member link.";
+          leaf name {
+            type string;
+            description
+              "Member link name.";
+          }
+        }
+      }
+    }
+  }
+
+  // IPv4 connection groupings
+
+  grouping ipv4-connection {
+    description
+      "IPv4-specific parameters.";
+    leaf local-address {
+      type inet:ipv4-address;
+      description
+        "The IP address used at the provider's interface.";
+    }
+    uses ac-common:ipv4-allocation-type;
+    choice allocation-type {
+      description
+        "Choice of the IPv4 address allocation.";
+      case dynamic {
+        description
+          "When the addresses are allocated by DHCP or other
+           dynamic means local to the infrastructure.";
+        choice address-assign {
+          description
+            "A choice for how IPv4 addresses are assigned.";
+          case number {
+            leaf number-of-dynamic-address {
+              type uint16;
+              description
+                "Specifies the number of IP addresses to be  
+                 assigned to the customer on this access.";
+            }
+          }
+          case explicit {
+            container customer-addresses {
+              description
+                "Container for customer addresses to be allocated
+                 using DHCP.";
+              list address-pool {
+                key "pool-id";
+                description
+                  "Describes IP addresses to be dyncamically 
+                   allocated.
+
+                   When only 'start-address' is present, it 
+                   represents a single address.
+
+                   When both 'start-address' and 'end-address' are
+                   specified, it implies a range inclusive of both
+                   addresses.";
+                leaf pool-id {
+                  type string;
+                  description
+                    "A pool identifier for the address range from
+                     'start-address' to 'end-address'.";
+                }
+                leaf start-address {
+                  type inet:ipv4-address;
+                  mandatory true;
+                  description
+                    "Indicates the first address in the pool.";
+                }
+                leaf end-address {
+                  type inet:ipv4-address;
+                  description
+                    "Indicates the last address in the pool.";
+                }
+              }
+            }
+          }
+        }
+        choice provider-dhcp {
+          description
+            "Parameters related to DHCP-allocated addresses.
+             IP addresses are allocated by DHCP, which is provided
+             by the operator.";
+          leaf dhcp-service-type {
+            type enumeration {
+              enum server {
+                description
+                  "Local DHCP server.";
+              }
+              enum relay {
+                description
+                  "Local DHCP relay.  DHCP requests are relayed to a
+                   provider's server.";
+              }
+            }
+            description
+              "Indicates the type of DHCP service to be enabled on
+               this access.";
+          }
+          choice service-type {
+            description
+              "Choice based on the DHCP service type.";
+            case relay {
+              description
+                "Container for a list of the provider's DHCP servers
+                 (i.e., 'dhcp-service-type' is set to 'relay').";
+              leaf-list server-ip-address {
+                type inet:ipv4-address;
+                description
+                  "IPv4 addresses of the provider's DHCP server, for
+                   use by the local DHCP relay.";
+              }
+            }
+          }
+        }
+        choice dhcp-relay {
+          description
+            "The DHCP relay is provided by the operator.";
+          container customer-dhcp-servers {
+            description
+              "Container for a list of the customer's DHCP servers.";
+            leaf-list server-ip-address {
+              type inet:ipv4-address;
+              description
+                "IPv4 addresses of the customer's DHCP server.";
+            }
+          }
+        }
+      }
+      case static-addresses {
+        description
+          "Lists the IPv4 addresses that are used.";
+        list address {
+          key "address-id";
+          ordered-by user;
+          description
+            "Lists the IPv4 addresses that are used. The first 
+             address of the list is the primary address of the 
+             connection.";
+          leaf address-id {
+            type string;
+            description
+              "An identifier of the static IPv4 address.";
+          }
+          leaf customer-address {
+            type inet:ipv4-address;
+            description
+              "An IPv4 address of the customer side.";
+          }
+          uses failure-detection-profile-reference;
+        }
+      }
+    }
+  }
+
+  grouping ipv6-connection {
+    description
+      "IPv6-specific parameters.";
+    leaf local-address {
+      type inet:ipv6-address;
+      description
+        "IPv6 address of the provider side.";
+    }
+    uses ac-common:ipv6-allocation-type;
+    choice allocation-type {
+      description
+        "Choice of the IPv6 address allocation.";
+      case dynamic {
+        description
+          "When the addresses are allocated by DHCP or other
+           dynamic means local to the infrastructure.";
+        choice address-assign {
+          description
+            "A choice for how IPv6 addresses are assigned.";
+          case number {
+            leaf number-of-dynamic-address {
+              type uint16;
+              description
+                "Specifies the number of IP addresses to be 
+                 assigned to the customer on this access.";
+            }
+          }
+          case explicit {
+            container customer-addresses {
+              description
+                "Container for customer addresses to be allocated
+                 using DHCP.";
+              list address-pool {
+                key "pool-id";
+                description
+                  "Describes IP addresses to be dyncamically 
+                   allocated.
+
+                   When only 'start-address' is present, it 
+                   represents a single address.
+
+                   When both 'start-address' and 'end-address' are
+                   specified, it implies a range inclusive of both
+                   addresses.";
+                leaf pool-id {
+                  type string;
+                  description
+                    "A pool identifier for the address range from
+                     'start-address' to 'end-address'.";
+                }
+                leaf start-address {
+                  type inet:ipv6-address;
+                  mandatory true;
+                  description
+                    "Indicates the first address in the pool.";
+                }
+                leaf end-address {
+                  type inet:ipv6-address;
+                  description
+                    "Indicates the last address in the pool.";
+                }
+              }
+            }
+          }
+        }
+        choice provider-dhcp {
+          description
+            "Parameters related to DHCP-allocated addresses.
+             IP addresses are allocated by DHCP, which is provided
+             by the operator.";
+          leaf dhcp-service-type {
+            type enumeration {
+              enum server {
+                description
+                  "Local DHCP server.";
+              }
+              enum relay {
+                description
+                  "Local DHCP relay. DHCP requests are relayed to
+                   a provider's server.";
+              }
+            }
+            description
+              "Indicates the type of DHCP service to
+               be enabled on this access.";
+          }
+          choice service-type {
+            description
+              "Choice based on the DHCP service type.";
+            case relay {
+              description
+                "Container for a list of the provider's DHCP servers
+                 (i.e., 'dhcp-service-type' is set to 'relay').";
+              leaf-list server-ip-address {
+                type inet:ipv6-address;
+                description
+                  "IPv6 addresses of the provider's DHCP server, for
+                   use by the local DHCP relay.";
+              }
+            }
+          }
+        }
+        choice dhcp-relay {
+          description
+            "The DHCP relay is provided by the operator.";
+          container customer-dhcp-servers {
+            description
+              "Container for a list of the customer's DHCP servers.";
+            leaf-list server-ip-address {
+              type inet:ipv6-address;
+              description
+                "IPv6 addresses of the customer's DHCP server.";
+            }
+          }
+        }
+      }
+      case static-addresses {
+        description
+          "Lists the IPv4 addresses that are used.";
+        list address {
+          key "address-id";
+          ordered-by user;
+          description
+            "Lists the IPv6 addresses that are used. The first 
+             address of the list is the primary address of 
+             the connection.";
+          leaf address-id {
+            type string;
+            description
+              "An identifier of the static IPv4 address.";
+          }
+          leaf customer-address {
+            type inet:ipv6-address;
+            description
+              "An IPv6 address of the customer side.";
+          }
+          uses failure-detection-profile-reference;
+        }
+      }
+    }
+  }
+
+  grouping ip-connection {
+    description
+      "Defines IP connection parameters.";
+    leaf l3-termination-point {
+      type string;
+      description
+        "Specifies a reference to a local Layer 3 termination point,
+         such as a bridge domain interface.";
+    }
+    container ipv4 {
+      if-feature "vpn-common:ipv4";
+      description
+        "IPv4-specific parameters.";
+      uses ipv4-connection;
+    }
+    container ipv6 {
+      if-feature "vpn-common:ipv6";
+      description
+        "IPv6-specific parameters.";
+      uses ipv6-connection;
+    }
+  }
+
+  /* Routing */
+  //BGP base parameters
+
+  grouping bgp-base {
+    description
+      "Configuration specific to BGP.";
+    leaf description {
+      type string;
+      description
+        "Includes a description of the BGP session. This description 
+         is meant to be used for diagnostic purposes. The semantic 
+         of the description is local to an implementation.";
+    }
+    uses rt-pol:apply-policy-group;
+    leaf local-as {
+      type inet:as-number;
+      description
+        "Indicates a local AS Number (ASN), if an ASN distinct from
+         the ASN configured at the AC level is needed.";
+    }
+    leaf peer-as {
+      type inet:as-number;
+      mandatory true;
+      description
+        "Indicates the customer's ASN when the customer requests BGP
+         routing.";
+    }
+    leaf address-family {
+      type identityref {
+        base vpn-common:address-family;
+      }
+      description
+        "This node contains the address families to be activated.
+         'dual-stack' means that both IPv4 and IPv6 will be
+         activated.";
+    }
+    leaf role {
+      type identityref {
+        base ac-common:bgp-role;
+      }
+      description
+        "Specifies the BGP role (provider, customer, peer, etc.).";
+    }
+    leaf multihop {
+      type uint8;
+      description
+        "Describes the number of IP hops allowed between a given BGP
+         neighbor and the PE.";
+    }
+    leaf as-override {
+      type boolean;
+      description
+        "Defines whether ASN override is enabled, i.e., replacing the
+         ASN of the customer specified in the AS_PATH attribute with
+         the local ASN.";
+    }
+    leaf allow-own-as {
+      type uint8;
+      description
+        "If set, specifies the maximum number of occurrences of the
+         provider's ASN that are permitted within the AS_PATH
+         before it is rejected.";
+    }
+    leaf prepend-global-as {
+      type boolean;
+      description
+        "In some situations, the ASN that is provided at the node
+         level may be distinct from the ASN configured at the AC.
+         When such ASNs are provided, they are both prepended to the
+         BGP route updates for this AC. To disable that behavior,
+         'prepend-global-as' must be set to 'false'.  In such a
+         case, the ASN that is provided at the node level is not
+         prepended to the BGP route updates for this access.";
+    }
+    leaf send-default-route {
+      type boolean;
+      description
+        "Defines whether default routes can be advertised to a peer.
+         If set, the default routes are advertised to a peer.";
+    }
+    leaf site-of-origin {
+      when "derived-from-or-self(../address-family, "
+         + "'vpn-common:ipv4' or 'vpn-common:dual-stack')" {
+        description
+          "Only applies if IPv4 is activated.";
+      }
+      type rt-types:route-origin;
+      description
+        "The Site of Origin attribute is encoded as a Route Origin
+         Extended Community. It is meant to uniquely identify the
+         set of routes learned from a site via a particular AC and
+         is used to prevent routing loops.";
+      reference
+        "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs),
+                   Section 7";
+    }
+    leaf ipv6-site-of-origin {
+      when "derived-from-or-self(../address-family, "
+         + "'vpn-common:ipv6' or 'vpn-common:dual-stack')" {
+        description
+          "Only applies if IPv6 is activated.";
+      }
+      type rt-types:ipv6-route-origin;
+      description
+        "The IPv6 Site of Origin attribute is encoded as an IPv6 
+         Route Origin Extended Community.  It is meant to uniquely 
+         identify the set of routes learned from a site.";
+      reference
+        "RFC 5701: IPv6 Address Specific BGP Extended Community
+                   Attribute";
+    }
+    list redistribute-connected {
+      key "address-family";
+      description
+        "Indicates, per address family, the policy to follow for
+         connected routes.";
+      leaf address-family {
+        type identityref {
+          base vpn-common:address-family;
+        }
+        description
+          "Indicates the address family.";
+      }
+      leaf enabled {
+        type boolean;
+        description
+          "Enables the redistribution of connected routes.";
+      }
+    }
+    container bgp-max-prefix {
+      description
+        "Controls the behavior when a prefix maximum is reached.";
+      leaf max-prefix {
+        type uint32;
+        description
+          "Indicates the maximum number of BGP prefixes allowed in 
+           the BGP session.
+
+           It allows control of how many prefixes can be received 
+           from a neighbor.
+
+           If the limit is exceeded, the action indicated in
+           'violate-action' will be followed.";
+        reference
+          "RFC 4271: A Border Gateway Protocol 4 (BGP-4),
+                     Section 8.2.2";
+      }
+      leaf warning-threshold {
+        type decimal64 {
+          fraction-digits 5;
+          range "0..100";
+        }
+        units "percent";
+        description
+          "When this value is reached, a warning notification will be
+           triggered.";
+      }
+      leaf violate-action {
+        type enumeration {
+          enum warning {
+            description
+              "Only a warning message is sent to the peer when the
+               limit is exceeded.";
+          }
+          enum discard-extra-paths {
+            description
+              "Discards extra paths when the limit is exceeded.";
+          }
+          enum restart {
+            description
+              "The BGP session restarts after the indicated time
+               interval.";
+          }
+        }
+        description
+          "If the BGP neighbor 'max-prefix' limit is reached, the 
+           action indicated in 'violate-action' will be followed.";
+      }
+      leaf restart-timer {
+        type uint32;
+        units "seconds";
+        description
+          "Time interval after which the BGP session will be
+           reestablished.";
+      }
+    }
+    container bgp-timers {
+      description
+        "Includes two BGP timers.";
+      leaf keepalive {
+        type uint16 {
+          range "0..21845";
+        }
+        units "seconds";
+        description
+          "This timer indicates the KEEPALIVE messages' frequency
+           between a PE and a BGP peer.
+
+           If set to '0', it indicates that KEEPALIVE messages are
+           disabled.
+
+           It is suggested that the maximum time between KEEPALIVE
+           messages be one-third of the Hold Time interval.";
+        reference
+          "RFC 4271: A Border Gateway Protocol 4 (BGP-4),
+                     Section 4.4";
+      }
+      leaf hold-time {
+        type uint16 {
+          range "0 | 3..65535";
+        }
+        units "seconds";
+        description
+          "Indicates the maximum number of seconds that may elapse
+           between the receipt of successive KEEPALIVE and/or UPDATE
+           messages from the peer.
+
+           The Hold Time must be either zero or at least three
+           seconds.";
+        reference
+          "RFC 4271: A Border Gateway Protocol 4 (BGP-4),
+                     Section 4.2";
+      }
+    }
+  }
+
+  grouping bgp-base-peer-group {
+    description
+      "Grouping for a basic BGP peer group.";
+    leaf name {
+      type string;
+      description
+        "Name of the BGP peer-group";
+    }
+    uses bgp-base;
+  }
+
+  grouping bgp-base-peer-group-list {
+    description
+      "Grouping for a list of basic BGP peer groups.";
+    list peer-group {
+      key "name";
+      description
+        "List of BGP peer groups uniquely identified by a name.";
+     uses bgp-base-peer-group;
+    }
+  }
+
+  grouping bgp-peer-group {
+    description
+      "Grouping for BGP peer group.";
+    leaf name {
+      type string;
+      description
+        "Name of the BGP peer-group";
+    }
+    leaf local-address {
+      type union {
+        type inet:ip-address;
+        type if:interface-ref;
+      }
+    description
+      "Sets the local IP address to use for the BGP 
+       transport session. This may be expressed as either 
+       an IP address or a reference to an interface.";
+    }
+    uses bgp-base;
+    uses ac-common:bgp-authentication;
+  }
+
+  grouping bgp-peer-group-list {
+    description
+      "Grouping for a list of BGP peer groups.";
+    list peer-group {
+      key "name";
+      description
+        "List of BGP peer groups uniquely identified by a name.";
+     uses bgp-peer-group;
+    }
+  }
+
+  // RIP base parameters
+
+  grouping rip-base {
+    description
+      "Configuration specific to RIP routing.";
+    leaf address-family {
+      type identityref {
+        base vpn-common:address-family;
+      }
+      description
+        "Indicates whether IPv4, IPv6, or both address families are
+         to be activated.";
+    }
+    container timers {
+      description
+        "Indicates the RIP timers.";
+      reference
+        "RFC 2080: RIPng for IPv6
+         RFC 2453: RIP Version 2";
+      leaf update-interval {
+        type uint16 {
+          range "1..32767";
+        }
+        units "seconds";
+        description
+          "Indicates the RIP update time, i.e., the amount of time
+           for which RIP updates are sent.";
+      }
+      leaf invalid-interval {
+        type uint16 {
+          range "1..32767";
+        }
+        units "seconds";
+        description
+          "The interval before a route is declared invalid after no
+           updates are received. This value is at least three times
+           the value for the 'update-interval' argument.";
+      }
+      leaf holddown-interval {
+        type uint16 {
+          range "1..32767";
+        }
+        units "seconds";
+        description
+          "Specifies the interval before better routes are 
+           released.";
+      }
+      leaf flush-interval {
+        type uint16 {
+          range "1..32767";
+        }
+        units "seconds";
+        description
+          "Indicates the RIP flush timer, i.e., the amount of time
+           that must elapse before a route is removed from the
+           routing table.";
+      }
+    }
+    leaf default-metric {
+      type uint8 {
+        range "0..16";
+      }
+      description
+        "Sets the default metric.";
+    }
+  }
+
+  // routing profile
+
+  grouping routing-profile {
+    description
+      "Defines routing protocols.";
+    list routing-protocol {
+      key "id";
+      description
+        "List of routing protocols used on the AC.";
+      leaf id {
+        type string;
+        description
+          "Unique identifier for the routing protocol.";
+      }
+      leaf type {
+        type identityref {
+          base vpn-common:routing-protocol-type;
+        }
+        description
+          "Type of routing protocol.";
+      }
+      container bgp {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:bgp-routing')" {
+          description
+            "Only applies when the protocol is BGP.";
+        }
+        if-feature "vpn-common:rtg-bgp";
+        description
+          "Configuration specific to BGP.";
+        container peer-groups {
+          description
+            "Lists a set of BGP peer groups.";
+          uses bgp-base-peer-group-list;
+        }
+      }
+      container ospf {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:ospf-routing')" {
+          description
+            "Only applies when the protocol is OSPF.";
+        }
+        if-feature "vpn-common:rtg-ospf";
+        description
+          "Configuration specific to OSPF.";
+        uses ac-common:ospf-basic;
+        leaf max-lsa {
+          type uint32 {
+            range "1..4294967294";
+          }
+          description
+            "Maximum number of allowed Link State Advertisements
+             (LSAs) that the OSPF instance will accept.";
+        }
+        leaf passive {
+          type boolean;
+          description
+            "Enables when set to true a passive interface. It is
+             active when set to false. A passive interface's prefix
+             will be advertised, but no neighbor adjacencies will be
+             formed on the interface.";
+        }
+      }
+      container isis {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:isis-routing')" {
+          description
+            "Only applies when the protocol is IS-IS.";
+        }
+        if-feature "vpn-common:rtg-isis";
+        description
+          "Configuration specific to IS-IS.";
+        uses ac-common:isis-basic;
+        leaf level {
+          type identityref {
+            base vpn-common:isis-level;
+          }
+          description
+            "Can be 'level-1', 'level-2', or 'level-1-2'.";
+          reference
+            "RFC 9181: A Common YANG Data Model for Layer 2 
+                       and Layer 3 VPNs";
+        }
+        leaf metric {
+          type uint32 {
+            range "0 .. 16777215";
+          }
+          description
+            "Metric of the AC. It is used in the routing state
+             calculation and path selection.";
+        }
+        leaf passive {
+          type boolean;
+          description
+            "When set to false, the interface is active. In such
+             mode, the interface sends or receives IS-IS protocol
+             control packets.
+
+             When set to true, the interface is passive. That is,
+             it suppresses the sending of IS-IS updates through the
+             specified interface.";
+        }
+      }
+      container rip {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:rip-routing')" {
+          description
+            "Only applies when the protocol is RIP.";
+        }
+        if-feature "vpn-common:rtg-rip";
+        description
+          "Configuration specific to RIP routing.";
+        uses rip-base;
+      }
+      container vrrp {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:vrrp-routing')" {
+          description
+            "Only applies when the protocol is the Virtual Router
+             Redundancy Protocol (VRRP).";
+        }
+        if-feature "vpn-common:rtg-vrrp";
+        description
+          "Configuration specific to VRRP.";
+        reference
+          "RFC 9568: Virtual Router Redundancy Protocol (VRRP)
+                     Version 3 for IPv4 and IPv6";
+        leaf address-family {
+          type identityref {
+            base vpn-common:address-family;
+          }
+          description
+            "Indicates whether IPv4, IPv6, or both address families
+             are to be enabled.";
+        }
+        leaf ping-reply {
+          type boolean;
+          description
+            "Controls whether the VRRP speaker should reply to ping
+             requests.";
+        }
+      }
+    }
+  }
+
+  grouping routing {
+    description
+      "Defines routing protocols.";
+    list routing-protocol {
+      key "id";
+      description
+        "List of routing protocols used on the AC.";
+      leaf id {
+        type string;
+        description
+          "Unique identifier for the routing protocol.";
+      }
+      leaf type {
+        type identityref {
+          base vpn-common:routing-protocol-type;
+        }
+        description
+          "Type of routing protocol.";
+      }
+      list routing-profile {
+        key "routing-profile-ref";
+        description
+          "Routing profiles.";
+        uses routing-profile-reference;
+        leaf type {
+          type identityref {
+            base vpn-common:ie-type;
+          }
+          description
+            "Import, export, or both.";
+        }
+      }
+      container static {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:static-routing')" {
+          description
+            "Only applies when the protocol is a static routing
+             protocol.";
+        }
+        description
+          "Configuration specific to static routing.";
+        container cascaded-lan-prefixes {
+          description
+            "LAN prefixes from the customer.";
+          list ipv4-lan-prefix {
+            if-feature "vpn-common:ipv4";
+            key "lan next-hop";
+            description
+              "List of LAN prefixes for the site.";
+            uses ac-common:ipv4-static-rtg-entry;
+            uses bfd-routing;
+            leaf preference {
+              type uint32;
+              description
+                "Indicates the preference associated with the static
+                 route.";
+            }
+            uses ac-common:service-status;
+          }
+          list ipv6-lan-prefix {
+            if-feature "vpn-common:ipv6";
+            key "lan next-hop";
+            description
+              "List of LAN prefixes for the site.";
+            uses ac-common:ipv6-static-rtg-entry;
+            uses bfd-routing;
+            leaf preference {
+              type uint32;
+              description
+                "Indicates the preference associated with the static
+                 route.";
+            }
+            uses ac-common:service-status;
+          }
+        }
+      }
+      container bgp {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:bgp-routing')" {
+          description
+            "Only applies when the protocol is BGP.";
+        }
+        if-feature "vpn-common:rtg-bgp";
+        description
+          "Configuration specific to BGP.";
+        container peer-groups {
+          description
+            "Configuration for BGP peer-groups";
+          uses bgp-peer-group-list;
+        }
+        list neighbor {
+          key "remote-address";
+          description
+            "List of BGP neighbors.";
+          leaf remote-address {
+            type inet:ip-address;
+            description
+              "The remote IP address of this entry's BGP peer.";
+          }
+          leaf local-address {
+            type union {
+              type inet:ip-address;
+              type if:interface-ref;
+            }
+            description
+              "Sets the local IP address to use for
+               the BGP transport session.  This may be
+               expressed as either an IP address or a
+               reference to an interface.";
+          }
+          leaf peer-group {
+            type leafref {
+              path "../../peer-groups/peer-group/name";
+            }
+            description
+              "The peer-group with which this neighbor is
+               associated.";
+          }
+          uses bgp-base;
+          uses bfd-routing;
+          uses ac-common:bgp-authentication;
+          uses ac-common:service-status;
+        }
+      }
+      container ospf {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:ospf-routing')" {
+          description
+            "Only applies when the protocol is OSPF.";
+        }
+        if-feature "vpn-common:rtg-ospf";
+        description
+          "Configuration specific to OSPF.";
+        uses ac-common:ospf-basic;
+        container sham-links {
+          if-feature "vpn-common:rtg-ospf-sham-link";
+          description
+            "List of sham links.";
+          reference
+            "RFC 4577: OSPF as the Provider/Customer Edge Protocol
+                       for BGP/MPLS IP Virtual Private Networks
+                       (VPNs), Section 4.2.7
+             RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
+                       (PE-CE) Routing Protocol, Section 5";
+          list sham-link {
+            key "target-site";
+            description
+              "Creates a sham link with another
+               site.";
+            leaf target-site {
+              type string;
+              description
+                "Target site for the sham link connection. The site
+                 is referred to by its identifier.";
+            }
+            leaf metric {
+              type uint16;
+              description
+                "Metric of the sham link. It is used in the routing
+                 state calculation and path selection.";
+              reference
+                "RFC 4577: OSPF as the Provider/Customer Edge 
+                           Protocol for BGP/MPLS IP Virtual Private
+                           Networks (VPNs), Section 4.2.7.3
+                 RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
+                           (PE-CE) Routing Protocol, Section 5.2";
+            }
+          }
+        }
+        leaf max-lsa {
+          type uint32 {
+            range "1..4294967294";
+          }
+          description
+            "Maximum number of allowed Link State Advertisements
+             (LSAs) that the OSPF instance will accept.";
+        }
+        leaf passive {
+          type boolean;
+          description
+            "Enables when set to true a passive interface. It is
+             active when set to false. A passive interface's prefix
+             will be advertised, but no neighbor adjacencies will be
+             formed on the interface.";
+        }
+        uses ac-common:ospf-authentication;
+        uses ac-common:service-status;
+      }
+      container isis {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:isis-routing')" {
+          description
+            "Only applies when the protocol is IS-IS.";
+        }
+        if-feature "vpn-common:rtg-isis";
+        description
+          "Configuration specific to IS-IS.";
+        uses ac-common:isis-basic;
+        leaf level {
+          type identityref {
+            base vpn-common:isis-level;
+          }
+          description
+            "Can be 'level-1', 'level-2', or 'level-1-2'.";
+          reference
+            "RFC 9181: A Common YANG Data Model for Layer 2 and
+                       Layer 3 VPNs";
+        }
+        leaf metric {
+          type uint32 {
+            range "0 .. 16777215";
+          }
+          description
+            "Metric of the AC. It is used in the routing state
+             calculation and path selection.";
+        }
+        leaf passive {
+          type boolean;
+            description
+              "When set to false, the interface is active. In such
+               mode, the interface sends or receives IS-IS protocol
+               control packets.
+
+               When set to true, the interface is passive. That is,
+               it suppresses the sending of IS-IS updates through the
+               specified interface.";
+        }
+        uses ac-common:isis-authentication;
+        uses ac-common:service-status;
+      }
+      container rip {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:rip-routing')" {
+          description
+            "Only applies when the protocol is RIP.
+             For IPv4, the model assumes that RIP
+             version 2 is used.";
+        }
+        if-feature "vpn-common:rtg-rip";
+        description
+          "Configuration specific to RIP routing.";
+        uses rip-base;
+        uses ac-common:rip-authentication;
+        uses ac-common:service-status;
+      }
+      container vrrp {
+        when "derived-from-or-self(../type, "
+           + "'vpn-common:vrrp-routing')" {
+          description
+            "Only applies when the protocol is the VRRP.";
+        }
+        if-feature "vpn-common:rtg-vrrp";
+        description
+          "Configuration specific to VRRP.";
+        reference
+          "RFC 9568: Virtual Router Redundancy Protocol (VRRP)
+                     Version 3 for IPv4 and IPv6";
+        leaf address-family {
+          type identityref {
+            base vpn-common:address-family;
+          }
+          description
+            "Indicates whether IPv4, IPv6, or both address families
+             are to be enabled.";
+        }
+        leaf vrrp-group {
+          type uint8 {
+            range "1..255";
+          }
+          description
+            "Includes the VRRP group identifier.";
+        }
+        leaf backup-peer {
+          type inet:ip-address;
+          description
+            "Indicates the IP address of the peer.";
+        }
+        leaf-list virtual-ip-address {
+          type inet:ip-address;
+          description
+            "Virtual IP addresses for a single VRRP
+             group.";
+          reference
+            "RFC 9568: Virtual Router Redundancy Protocol (VRRP)
+                       Version 3 for IPv4 and IPv6, Sections 1.2
+                       and 1.3";
+        }
+        leaf priority {
+          type uint8 {
+            range "1..254";
+          }
+          description
+            "Sets the local priority of the VRRP speaker.";
+        }
+        leaf ping-reply {
+          type boolean;
+          description
+            "Controls whether the VRRP speaker should reply to ping
+             requests.";
+        }
+        uses ac-common:service-status;
+      }
+    }
+  }
+
+  // OAM
+
+  grouping bfd {
+    description
+      "Grouping for BFD.";
+    leaf session-type {
+      type identityref {
+        base vpn-common:bfd-session-type;
+      }
+      description
+        "Specifies the BFD session type.";
+    }
+    leaf desired-min-tx-interval {
+      type uint32;
+      units "microseconds";
+      description
+        "The minimum interval between transmissions of BFD Control
+         packets, as desired by the operator.";
+      reference
+        "RFC 5880: Bidirectional Forwarding Detection (BFD),
+                   Section 6.8.7";
+    }
+    leaf required-min-rx-interval {
+      type uint32;
+      units "microseconds";
+      description
+        "The minimum interval between received BFD Control packets 
+         that the PE should support.";
+      reference
+        "RFC 5880: Bidirectional Forwarding Detection (BFD),
+                   Section 6.8.7";
+    }
+    leaf local-multiplier {
+      type uint8 {
+        range "1..255";
+      }
+      description
+        "Specifies the detection multiplier that is transmitted to a
+         BFD peer.
+
+         The detection interval for the receiving BFD peer is
+         calculated by multiplying the value of the negotiated
+         transmission interval by the received detection multiplier
+         value.";
+      reference
+        "RFC 5880: Bidirectional Forwarding Detection (BFD),
+                   Section 6.8.7";
+    }
+    leaf holdtime {
+      type uint32;
+      units "milliseconds";
+      description
+        "Expected BFD holdtime.
+
+         The customer may impose some fixed values for the holdtime
+         period if the provider allows the customer to use this
+         function.";
+      reference
+        "RFC 5880: Bidirectional Forwarding Detection (BFD),
+                   Section 6.8.18";
+    }
+  }
+
+  grouping bfd-routing {
+    description
+      "Defines a basic BFD grouping for routing configuration.";
+    container bfd {
+      if-feature "vpn-common:bfd";
+      description
+        "BFD control for this nighbor.";
+      leaf enabled {
+        type boolean;
+        description
+          "Enables BFD if set to true. BFD is disabled of set to
+           false.";
+      }
+      uses failure-detection-profile-reference;
+    }
+  }
+
+  // OAM
+
+  grouping oam {
+    description
+      "Defines the Operations, Administration, and Maintenance
+       (OAM) mechanisms used.";
+    container bfd {
+      if-feature "vpn-common:bfd";
+      description
+        "Container for BFD.";
+      list session {
+        key "dest-addr";
+        description
+          "List of IP sessions.";
+         leaf dest-addr {
+           type inet:ip-address;
+           description
+             "IP address of the peer.";
+        }
+        leaf source-address {
+          type union {
+            type inet:ip-address;
+            type if:interface-ref;
+           }
+           description
+             "Sets the local IP address to use for the BFD
+              session. This may be expressed as either
+              an IP address or a reference to an interface.";
+        }
+        uses failure-detection-profile-reference;
+        uses bfd;
+        container authentication {
+          presence "Enables BFD authentication";
+          description
+            "Parameters for BFD authentication.";
+          leaf key-chain {
+            type key-chain:key-chain-ref;
+            description
+              "Name of the key chain.";
+          }
+          leaf meticulous {
+            type boolean;
+            description
+              "Enables meticulous mode.";
+            reference
+              "RFC 5880: Bidirectional Forwarding Detection (BFD),
+                         Section 6.7";
+          }
+        }
+        uses ac-common:service-status;
+      }
+    }
+  }
+
+  // security
+
+  grouping security {
+    description
+      "Security parameters for an AC.";
+    container encryption {
+      if-feature "vpn-common:encryption";
+      description
+        "Container for AC encryption.";
+      leaf enabled {
+        type boolean;
+        description
+          "If set to 'true', traffic encryption on the connection is
+           required. Otherwise, it is disabled.";
+      }
+      leaf layer {
+        when "../enabled = 'true'" {
+          description
+            "Included only when encryption is enabled.";
+        }
+        type enumeration {
+          enum layer2 {
+            description
+              "Encryption occurs at Layer 2.";
+          }
+          enum layer3 {
+            description
+              "Encryption occurs at Layer 3. For example, IPsec
+               may be used when a customer requests Layer 3
+               encryption.";
+          }
+        }
+        description
+          "Indicates the layer on which encryption is applied.";
+      }
+    }
+    container encryption-profile {
+      when "../encryption/enabled = 'true'" {
+        description
+          "Indicates the layer on which encryption is enabled.";
+      }
+      description
+        "Container for the encryption profile.";
+      choice profile {
+        description
+          "Choice for the encryption profile.";
+        case provider-profile {
+          uses encryption-profile-reference;
+        }
+        case customer-profile {
+          leaf customer-key-chain {
+            type key-chain:key-chain-ref;
+            description
+              "Customer-supplied key chain.";
+          }
+        }
+      }
+    }
+  }
+
+  // AC profile
+
+  grouping ac-profile {
+    description
+      "Grouping for attachment circuit profiles.";
+    container routing-protocols {
+      description
+        "Defines routing protocols.";
+      uses routing-profile;
+    }
+    container oam {
+      description
+        "Defines the OAM mechanisms used for the AC profile.";
+      container bfd {
+        if-feature "vpn-common:bfd";
+        description
+          "Container for BFD.";
+        uses bfd;
+      }
+    }
+  }
+
+  // Parent and Child ACs
+
+  grouping ac-hierarchy {
+    description
+      "Container for parent and child AC references.";
+    container parent-ref {
+      description
+        "Specifies the parent AC that is inherited by an AC.
+         Parent ACs are used, e.g., in contexts where multiple
+         CEs are terminating the same AC, but some specific
+         information is required for each peer SAP.";
+      uses ac-ntw:attachment-circuit-reference;
+    }
+    container child-ref {
+      config false;
+      description
+        "Specifies a child AC that relies upon a parent AC.";
+      uses ac-ntw:attachment-circuit-references;
+    }
+  }
+
+  // AC network provisioning 
+
+  grouping ac {
+    description
+      "Grouping for attachment circuits.";
+    leaf description {
+      type string;
+      description
+        "Associates a description with an AC.";
+    }
+    container l2-connection {
+      if-feature "ac-common:layer2-ac";
+      description
+        "Defines Layer 2 protocols and parameters that are required
+         to enable AC connectivity.";
+      uses l2-connection-if-ref;
+    }
+    container ip-connection {
+      if-feature "ac-common:layer3-ac";
+      description
+        "Defines IP connection parameters.";
+      uses ip-connection;
+    }
+    container routing-protocols {
+      description
+        "Defines routing protocols.";
+      uses routing;
+    }
+    container oam {
+      description
+        "Defines the OAM mechanisms used for the AC.";
+      uses oam;
+    }
+    container security {
+      description
+        "AC-specific security parameters.";
+      uses security;
+    }
+    container service {
+      description
+        "AC-specific bandwith parameters.";
+      leaf mtu {
+        type uint32;
+        units "bytes";
+        description
+          "Layer 2 MTU.";
+      }
+      uses ac-svc:bandwidth;
+      container qos {
+        if-feature "vpn-common:qos";
+        description
+          "QoS configuration.";
+        container qos-profiles {
+          description
+            "QoS profile configuration.";
+          list qos-profile {
+            key "qos-profile-ref";
+            description
+              "Points to a QoS profile.";
+            uses qos-profile-reference;
+            leaf direction {
+              type identityref {
+                base vpn-common:qos-profile-direction;
+              }
+              description
+                "The direction to which the QoS profile
+                 is applied.";
+            }
+          }
+        }
+      }
+      container access-control-list {
+        description
+          "Container for the Access Control List (ACL).";
+        container acl-profiles {
+          description
+            "ACL profile configuration.";
+          list acl-profile {
+            key "forwarding-profile-ref";
+            description
+              "Points to an ACL profile.";
+            uses forwarding-profile-reference;
+          }
+        }
+      }
+    }
+  }
+
+  augment "/nw:networks/nw:network" {
+    description
+      "Add a list of profiles.";
+    container specific-provisioning-profiles {
+      description
+        "Contains a set of valid profiles to reference in the AC
+         activation.";
+      uses ac-common:ac-profile-cfg;
+    }
+    list ac-profile {
+      key "name";
+      description
+        "Specifies a list of AC profiles.";
+      leaf name {
+        type string;
+        description
+          "Name of the AC.";
+      }
+      uses ac-ntw:ac-profile;
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:node" {
+    when '../nw:network-types/sap:sap-network' {
+      description
+        "Augmentation parameters apply only for SAP networks.";
+    }
+    description
+      "Augments nodes with AC provisioning details.";
+    list ac {
+      key "name";
+      description
+        "List of ACs.";
+      leaf name {
+        type string;
+        description
+          "A name that identifies the AC locally.";
+      }
+      leaf svc-ref {
+        type ac-svc:attachment-circuit-reference;
+        description
+          "A reference to the AC as exposed at the service level.";
+      }
+      list profile {
+        key "ac-profile-ref";
+        description
+          "List of AC profiles.";
+        uses ac-profile-reference;
+      }
+      uses ac-hierarchy;
+      leaf-list peer-sap-id {
+        type string;
+        description
+          "One or more peer SAPs can be indicated.";
+      }
+      uses ac-common:redundancy-group;
+      uses ac-common:service-status;
+      uses ac-ntw:ac;
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:node"
+        + "/sap:service/sap:sap" {
+    when '../../../nw:network-types/sap:sap-network' {
+      description
+        "Augmentation parameters apply only for SAP networks.";
+    }
+    description
+      "Augments SAPs with AC provisioning details.";
+    list ac {
+      key "ac-ref";
+      description
+        "Specifies the ACs that are terminated by the SAP.";
+      uses ac-ntw:attachment-circuit-reference;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-te-topology@2023-09-28.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-te-topology@2023-09-28.yang
new file mode 100644
index 0000000000000000000000000000000000000000..b182f7f5a323d1a50c1ab53715b96e02758ea327
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-te-topology@2023-09-28.yang
@@ -0,0 +1,2275 @@
+   module ietf-eth-te-topology {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-eth-te-topology";
+     prefix "etht";
+
+     import ietf-network {
+       prefix "nw";
+       reference
+         "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-network-topology {
+       prefix "nt";
+       reference
+         "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-te-topology {
+       prefix "tet";
+       reference
+         "RFC 8795: YANG Data Model for Traffic Engineering
+          (TE) Topologies";
+     }
+
+     import ietf-yang-types {
+       prefix "yang";
+       reference
+        "RFC 6991: Common YANG Data Types";
+     }
+
+     import ietf-eth-tran-types {
+       prefix "etht-types";
+       reference
+        "RFC YYYY: A YANG Data Model for Transport Network Client
+        Signals";
+     }
+     // RFC Ed.: replace YYYY with actual RFC number, update date
+     // information and remove this note
+
+     organization
+       "IETF CCAMP Working Group";
+     contact
+       "WG Web: <https://datatracker.ietf.org/wg/ccamp/>
+        WG List: <mailto:ccamp@ietf.org>
+
+        Editor: Haomian Zheng
+          <mailto:zhenghaomian@huawei.com>
+
+        Editor: Italo Busi
+          <mailto:italo.busi@huawei.com>
+
+        Editor: Aihua Guo
+          <mailto:aihuaguo.ietf@gmail.com>
+
+        Editor: Yunbin Xu
+          <mailto:xuyunbin@caict.ac.cn>
+
+        Editor: Yang Zhao
+          <mailto:zhaoyangyjy@chinamobile.com>
+
+        Editor: Xufeng Liu
+          <mailto:xufeng.liu.ietf@gmail.com>";
+
+     description
+       "This module defines a YANG data model for describing
+        layer-2 Ethernet transport topologies. The model fully
+        conforms to the Network Management Datastore
+        Architecture (NMDA).
+
+        Copyright (c) 2023 IETF Trust and the persons identified
+        as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Revised BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.
+
+        The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+        NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+        'MAY', and 'OPTIONAL' in this document are to be interpreted as
+        described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+        they appear in all capitals, as shown here.";
+
+     revision 2023-09-28 {
+       description
+         "Initial Revision";
+       reference
+         "RFC XXXX: A YANG Data Model for Ethernet TE Topology";
+       // RFC Ed.: replace XXXX with actual RFC number, update date
+       // information and remove this note
+     }
+
+     /*
+      * Groupings
+      */
+
+     grouping label-range-info {
+       description
+         "Ethernet technology-specific label range related
+         information with a presence container indicating that the
+         label range is an Ethernet technology-specific label range.
+
+         This grouping SHOULD be used together with the
+         eth-label and eth-label-step groupings to provide Ethernet
+         technology-specific label information to the models which
+         use the label-restriction-info grouping defined in the module
+         ietf-te-types.";
+
+       container ethernet-label-range {
+         presence
+           "Indicates the label range is an Ethernet label range.
+
+           This container must not be present if there are other
+           presence containers or attributes indicating another type
+           of label range.";
+         description
+           "Ethernet-specific label range related information.";
+
+         uses etht-types:eth-label-restriction;
+       }
+     }
+
+     grouping eth-tran-topology-type {
+       description
+         "Identifies the Ethernet Transport topology type";
+
+       container eth-tran-topology {
+         presence "indicates a topology type of
+                   Ethernet Transport Network.";
+         description "Eth transport topology type";
+       }
+     }
+
+     grouping ltp-bandwidth-profiles {
+       description
+         "A grouping which represents the bandwidth profile(s)
+         for the ETH LTP.";
+
+       choice direction {
+         description
+           "Whether the bandwidth profiles are symmetrical or
+            asymmetrical";
+         case symmetrical {
+           description
+             "The same bandwidth profile is used to describe the ingress
+              and the egress bandwidth profile.";
+
+           container ingress-egress-bandwidth-profile {
+             description
+               "The bandwith profile used in the ingress and egress
+                direction.";
+             uses etht-types:etht-bandwidth-profiles;
+           }
+         }
+         case asymmetrical {
+           description
+             "Different ingress and egress bandwidth profiles
+              can be specified.";
+           container ingress-bandwidth-profile {
+             description
+               "The bandwidth profile used in the ingress direction.";
+             uses etht-types:etht-bandwidth-profiles;
+           }
+           container egress-bandwidth-profile {
+             description
+               "The bandwidth profile used in the egress direction.";
+             uses etht-types:etht-bandwidth-profiles;
+           }
+         }
+       }
+     }
+     grouping eth-ltp-attributes {
+       description
+         "Ethernet transport Link Termination Point (LTP) attributes";
+
+       leaf ltp-mac-address {
+         type yang:mac-address;
+         description
+           "The MAC address of the Ethernet LTP.";
+       }
+       leaf port-vlan-id {
+         type etht-types:vlanid;
+         description
+           "The Port VLAN ID of the Ethernet LTP.";
+         reference
+           "IEEE 802.1Q: Virtual Bridged Local Area Networks";
+       }
+       leaf maximum-frame-size {
+         type uint16 {
+           range "64 .. 65535";
+         }
+         description
+           "Maximum frame size";
+         reference
+           "IEEE 802.1Q: Virtual Bridged Local Area Networks";
+       }
+         uses ltp-bandwidth-profiles;
+     }
+
+     grouping svc-vlan-classification {
+       description
+         "Grouping defining the capabilities for VLAN classification.";
+
+       leaf-list supported-tag-types {
+         type etht-types:eth-tag-classify;
+         description
+           "List of VLAN tag types that can be used for the VLAN
+            classification. In case VLAN classification is not
+            supported, the list is empty.";
+       }
+       leaf vlan-bundling {
+         type boolean;
+         description
+           "In case VLAN classification is supported, indicates whether
+           VLAN bundling classification is also supported.";
+         reference
+           "MEF 10.3: Ethernet Services Attributes Phase 3";
+       }
+       leaf vlan-range {
+         type etht-types:vid-range-type;
+         description
+           "In case VLAN classification is supported, indicates the
+           of available VLAN ID values.";
+       }
+     }
+
+     grouping svc-vlan-push {
+       description
+         "Grouping defining the capabilities for VLAN push or swap
+          operations.";
+
+       leaf-list supported-tag-types {
+         type etht-types:eth-tag-type;
+         description
+           "List of VLAN tag types that can be used to push or swap a
+            VLAN tag. In case VLAN push/swap is not supported, the list
+            is empty.";
+         reference
+           "IEEE 802.1Q: Virtual Bridged Local Area Networks";
+       }
+       leaf vlan-range {
+         type etht-types:vid-range-type;
+         description
+           "In case VLAN push/swap operation is supported, the range
+           of available VLAN ID values.";
+       }
+     }
+
+     grouping eth-svc-attributes {
+       description
+         "Ethernet Link Termination Point (LTP) service attributes.";
+
+       container supported-classification {
+         description
+           "Service classification capability supported by the
+           Ethernet Link Termination Point (LTP).";
+
+         leaf port-classification {
+           type boolean;
+           description
+             "Indicates that the ETH LTP support port-based service
+             classification.";
+         }
+         container vlan-classification {
+           description
+             "Service classification capabilities based on the VLAN
+              tag(s) supported by the ETH LTP.";
+           leaf vlan-tag-classification {
+             type boolean;
+             description
+               "Indicates that the ETH LTP supports VLAN service
+               classification.";
+           }
+           container outer-tag {
+             description
+               "Service classification capabilities based on the outer
+                VLAN tag, supported by the ETH LTP.";
+             uses svc-vlan-classification;
+           }
+           container second-tag {
+             description
+               "Service classification capabilities based on the second
+                VLAN tag, supported by the ETH LTP.";
+             leaf second-tag-classification {
+               type boolean;
+               must ". = 'false' or "
+                  + "../../vlan-tag-classification = 'true'" {
+                 description
+                   "VLAN service classification based on the second
+                   VLAN tag can be supported only when VLAN service
+                   classification";
+               }
+               description
+                 "Indicates that the ETH LTP support  VLAN service
+                  classification based on the second VLAN tag.";
+             }
+             uses svc-vlan-classification;
+           }
+         }
+       }
+
+       container supported-vlan-operations {
+         description
+           "Reports the VLAN operations supported by the ETH LTP.";
+
+         leaf asymmetrical-operations {
+           type boolean;
+           description
+             "Indicates whether the ETH LTP supports also asymmetrical
+              VLAN operations.It is assumed that symmetrical VLAN
+              operations are alwyas supported.";
+         }
+         leaf transparent-vlan-operations {
+           type boolean;
+           description
+             "Indicates that the ETH LTP supports transparent
+             operations.";
+         }
+         container vlan-pop {
+           description
+             "Indicates VLAN pop or swap operations capabilities.";
+
+           leaf vlan-pop-operations {
+             type boolean;
+             description
+               "Indicates that the ETH LTP supports VLAN pop or
+                swap operations.";
+           }
+           leaf max-pop-tags {
+             type uint8 {
+               range "1..2";
+             }
+             description
+               "Indicates the maximum number of tags that can be
+                popped/swapped.";
+           }
+         }
+         container vlan-push {
+           description
+             "Indicates VLAN push or swap operations capabilities.";
+
+           leaf vlan-push-operation {
+             type boolean;
+             description
+               "Indicates that the ETH LTP supports VLAN push or
+                swap operations.";
+           }
+           container outer-tag {
+             description
+               "Indicates the supported VLAN operation capabilities
+                on the outer VLAN tag.";
+             uses svc-vlan-push;
+           }
+           container second-tag {
+             description
+               "Indicates the supported VLAN operation capabilities
+                on the second VLAN tag.";
+             leaf push-second-tag {
+               type boolean;
+               description
+                 "Indicates that the ETH LTP supports VLAN push or swap
+                  operations for the second VLAN tag.";
+             }
+             uses svc-vlan-push;
+           }
+         }
+       }
+     }
+
+     /*
+      * Data nodes
+      */
+
+     augment "/nw:networks/nw:network/nw:network-types/"
+           + "tet:te-topology" {
+       description
+         "Augment network types to include ETH transport newtork";
+
+       uses eth-tran-topology-type;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te"
+           + "/tet:te-node-attributes" {
+       when "../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description "Augment only for Ethernet transport network.";
+       }
+       description "Augment TE node attributes.";
+       container eth-node {
+         presence "The TE node is an Ethernet node.";
+         description
+           "Presence container used only to indicate that the TE node
+           is an Ethernet node.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link" {
+       when "../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description "Augment only for Ethernet transport network.";
+       }
+       description "Augment link configuration";
+
+       container eth-svc {
+         presence
+           "When present, indicates that the Link supports Ethernet
+           client signals.";
+         description
+           "Presence container used only to indicate that the link
+           supports Ethernet client signals.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/nt:termination-point" {
+       when "../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description "Augment only for Ethernet transport network.";
+       }
+       description
+         "Augment ETH LTP attributes";
+
+       container eth-svc {
+         presence
+           "When present, indicates that the Link Termination Point
+           (LTP) supports Ethernet client signals.";
+         description
+           "ETH LTP Service attributes.";
+
+         uses eth-svc-attributes;
+       }
+       container eth-link-tp {
+         description
+           "Attributes of the Ethernet Link Termination Point (LTP).";
+         uses eth-ltp-attributes;
+       }
+     }
+
+     /*
+      * Augment TE bandwidth
+      */
+
+     augment "/nw:networks/nw:network/nw:node/nt:termination-point/"
+           + "tet:te/"
+           + "tet:interface-switching-capability/tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum LSP TE bandwidth for the link termination
+          point (LTP).";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the TE node
+          connectivity matrices.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the
+          connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the TE node
+          connectivity matrices information source.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the
+          connectivity matrix entry information source";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:client-layer-adaptation/tet:switching-capability/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment client TE bandwidth of the tunnel termination point
+          (TTP)";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/tet:path-constraints/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints for the TTP
+          Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/tet:path-constraints/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints for the TTP
+          Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:interface-switching-capability/tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum LSP TE bandwidth for the TE link.";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum TE bandwidth for the TE link";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum reservable TE bandwidth for the TE link";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment unreserved TE bandwidth for the TE Link";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:interface-switching-capability/"
+           + "tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum LSP TE bandwidth for the TE link
+          information source";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum TE bandwidth for the TE link
+          information source";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment maximum reservable TE bandwidth for the TE link
+          information-source";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment unreserved TE bandwidth of the TE link
+          information source";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:interface-switching-capability/"
+           + "tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       description
+         "Augment maximum LSP TE bandwidth of the TE link
+          template";
+       case eth {
+         uses etht-types:eth-bandwidth;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment maximum TE bandwidth the TE link template";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment maximum reservable TE bandwidth for the TE link
+          template.";
+       uses etht-types:eth-bandwidth;
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment unreserved TE bandwidth the TE link template";
+       uses etht-types:eth-bandwidth;
+     }
+
+     /*
+      * Augment TE label range information
+      */
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TE node
+          connectivity matrices.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the source LTP
+          of the connectivity matrix entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the destination LTP
+          of the connectivity matrix entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TE node
+          connectivity matrices information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the source LTP
+          of the connectivity matrix entry information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the destination LTP
+          of the connectivity matrix entry information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TTP
+          Local Link Connectivities.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TTP
+          Local Link Connectivity entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TE link.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+           Ethernet topology type.";
+       }
+       description
+         "Augment TE label range information for the TE link
+          information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       description
+         "Augment TE label range information for the TE link template.";
+       uses label-range-info;
+     }
+
+     /*
+      * Augment TE label.
+      */
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TE node
+          connectivity matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/"
+           + "tet:label-restriction/tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TE node
+          connectivity matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/"
+           + "tet:label-restriction/tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TE node
+          connectivity matrices";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:underlay/tet:primary-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path of the
+          TE node connectivity matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:underlay/tet:backup-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path of the
+          TE node connectivity matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TE node connectivity
+          matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TE node connectivity
+          matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TE node connectivity matrices";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the source LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the source LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the source LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the destination LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the destination LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the destination LTP
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:primary-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:backup-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:optimizations/"
+           + "tet:algorithm/tet:metric/tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:optimizations/"
+           + "tet:algorithm/tet:metric/tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the connectivity matrix entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TE node connectivity
+          matrices information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TE node connectivity
+          matrices information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TE node connectivity
+          matrices information source.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE node connectivity matrices of the information
+          source entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE node connectivity matrices of the information
+          source entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TE node connectivity matrices
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TE node connectivity matrices
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TE node connectivity matrices information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the source LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the source LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the source LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the destination LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the destination LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the destination LTP
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the connectivity matrix entry
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the connectivity matrix entry
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the connectivity matrix entry information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+         + "tet:tunnel-termination-point/"
+         + "tet:local-link-connectivities/"
+         + "tet:label-restrictions/tet:label-restriction/"
+         + "tet:label-start/"
+         + "tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TTP
+          Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology"{
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TTP
+          Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology"{
+       when "../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TTP
+          Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TTP Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TTP Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TTP Local Link
+          Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TTP Local Link
+          Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TTP Local Link Connectivities.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TTP
+          Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TTP
+          Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TTP
+          Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TTP Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TTP Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TTP Local Link
+          Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TTP Local Link
+          Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TTP Local Link Connectivity entry.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE link.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE link.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TE link.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TE link.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TE link.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range start for the TE link
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range end for the TE link
+          information source.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "etht:eth-tran-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            Ethernet topology type.";
+       }
+       description
+         "Augment TE label range step for the TE link
+          information source.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE link template.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE link template.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       description
+         "Augment TE label range start for the TE link template.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       description
+         "Augment TE label range end for the TE link template.";
+       case eth {
+         uses etht-types:eth-label;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       description
+         "Augment TE label range step for the TE link template.";
+       case eth {
+         uses etht-types:eth-label-step;
+       }
+     }
+
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-service@2023-10-23.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-service@2023-10-23.yang
new file mode 100644
index 0000000000000000000000000000000000000000..222066adf0e1ece5f964fbabb170edf92d57b21e
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-service@2023-10-23.yang
@@ -0,0 +1,1004 @@
+   module ietf-eth-tran-service {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-service";
+
+     prefix "ethtsvc";
+     import ietf-yang-types {
+       prefix "yang";
+       reference "RFC 6991 - Common YANG Data Types";
+     }
+
+     import ietf-network {
+       prefix "nw";
+       reference "RFC8345 - A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-network-topology {
+       prefix "nt";
+       reference "RFC8345 - A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-te-types {
+       prefix "te-types";
+       reference "RFC 8776 - Traffic Engineering Common YANG Types";
+     }
+
+     import ietf-eth-tran-types {
+       prefix "etht-types";
+       reference "RFC XXXX - A YANG Data Model for Transport
+                  Network Client Signals";
+     }
+
+     import ietf-routing-types {
+       prefix "rt-types";
+       reference "RFC 8294 - Common YANG Data Types for the
+                  Routing Area";
+
+     }
+
+     import ietf-te {
+       prefix "te";
+       reference "RFC YYYY - A YANG Data Model for Traffic
+                  Engineering Tunnels and Interfaces";
+     }
+
+     organization
+       "Internet Engineering Task Force (IETF) CCAMP WG";
+     contact
+       "
+         WG List: <mailto:ccamp@ietf.org>
+
+         ID-draft editor:
+           Haomian Zheng (zhenghaomian@huawei.com);
+           Italo Busi (italo.busi@huawei.com);
+           Aihua Guo (aihuaguo.ietf@gmail.com);
+           Anton Snitser (antons@sedonasys.com);0
+           Francesco Lazzeri (francesco.lazzeri@ericsson.com);
+           Yunbin Xu (xuyunbin@caict.ac.cn);
+           Yang Zhao (zhaoyangyjy@chinamobile.com);
+           Xufeng Liu (xufeng.liu.ietf@gmail.com);
+           Giuseppe Fioccola (giuseppe.fioccola@huawei.com);
+           Chaode Yu (yuchaode@huawei.com)
+       ";
+
+     description
+       "This module defines a YANG data model for describing
+        the Ethernet services. The model fully conforms to the
+        Network Management Datastore Architecture (NMDA).
+
+        Copyright (c) 2021 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.";
+
+     revision 2023-10-23 {
+       description
+         "version -04 as an WG document";
+       reference
+         "draft-ietf-ccamp-client-signal-yang";
+     }
+
+     /*
+      * Groupings
+      */
+
+     grouping vlan-classification {
+       description
+         "A grouping which represents classification
+         on an 802.1Q VLAN tag.";
+
+       leaf tag-type {
+         type etht-types:eth-tag-classify;
+         description
+           "The tag type used for VLAN classification.";
+       }
+       choice individual-bundling-vlan {
+         description
+           "VLAN based classification can be individual
+            or bundling.";
+
+         case individual-vlan {
+           leaf vlan-value {
+             type etht-types:vlanid;
+             description
+               "VLAN ID value.";
+           }
+         }
+
+         case vlan-bundling {
+           leaf vlan-range {
+             type etht-types:vid-range-type;
+             description
+               "List of VLAN ID values.";
+           }
+         }
+       }
+     }
+
+     grouping vlan-write {
+       description
+         "A grouping which represents push/pop operations
+          of an 802.1Q VLAN tag.";
+
+       leaf tag-type {
+         type etht-types:eth-tag-type;
+         description
+           "The VLAN tag type to push/swap.";
+       }
+       leaf vlan-value {
+         type etht-types:vlanid;
+         description
+           "The VLAN ID value to push/swap.";
+       }
+   /*
+    * To be added: this attribute is used when:
+    * a) the ETH service has only one CoS (as in current version)
+    * b) as a default when a mapping between a given CoS value
+    *    and the PCP value is not defined (in future versions)
+    */
+       leaf default-pcp {
+         type uint8 {
+           range "0..7";
+         }
+         description
+           "The default Priority Code Point (PCP) value to push/swap";
+       }
+     }
+
+     grouping vlan-operations {
+       description
+         "A grouping which represents VLAN operations.";
+
+         leaf pop-tags {
+         type uint8 {
+           range "1..2";
+         }
+         description
+           "The number of VLAN tags to pop (or swap if used in
+            conjunction with push-tags)";
+       }
+       container push-tags {
+         description
+           "The VLAN tags to push (or swap if used in
+            conjunction with pop-tags)";
+
+         container outer-tag {
+           presence
+             "Indicates existence of the outermost VLAN tag to
+              push/swap";
+
+           description
+             "The outermost VLAN tag to push/swap.";
+
+           uses vlan-write;
+         }
+         container second-tag {
+         must
+           '../outer-tag/tag-type = "etht-types:s-vlan-tag-type" and ' +
+           'tag-type = "etht-types:c-vlan-tag-type"'
+           {
+
+             error-message
+               "
+                 When pushing/swapping two tags, the outermost tag must
+                 be specified and of S-VLAN type and the second
+                 outermost tag must be of C-VLAN tag type.
+               ";
+             description
+               "
+                 For IEEE 802.1Q interoperability, when pushing/swapping
+                 two tags, it is required that the outermost tag exists
+                 and is an S-VLAN, and the second outermost tag is a
+                 C-VLAN.
+               ";
+           }
+
+           presence
+             "Indicates existence of a second outermost VLAN tag to
+              push/swap";
+
+           description
+             "The second outermost VLAN tag to push/swap.";
+           uses vlan-write;
+         }
+       }
+     }
+
+     grouping named-or-value-bandwidth-profile {
+       description
+         "A grouping to configure a bandwdith profile either by
+          referencing a named bandwidth profile or by
+          configuring the values of the bandwidth profile attributes.";
+       choice style {
+         description
+           "Whether the bandwidth profile is named or defined by value";
+
+         case named {
+           description
+             "Named bandwidth profile.";
+           leaf bandwidth-profile-name {
+             type leafref {
+                path "/ethtsvc:etht-svc/ethtsvc:globals/"
+                + "ethtsvc:named-bandwidth-profiles/"
+                + "ethtsvc:bandwidth-profile-name";
+                }
+             description
+               "Name of the bandwidth profile.";
+           }
+         }
+         case value {
+           description
+             "Bandwidth profile configured by value.";
+           uses etht-types:etht-bandwidth-profiles;
+         }
+       }
+     }
+
+     grouping bandwidth-profiles {
+       description
+         "A grouping which represent bandwidth profile configuration.";
+
+       choice direction {
+         description
+           "Whether the bandwidth profiles are symmetrical or
+            asymmetrical";
+         case symmetrical {
+           description
+             "The same bandwidth profile is used to describe both
+              the ingress and the egress bandwidth profile.";
+           container ingress-egress-bandwidth-profile {
+             description
+               "The bandwdith profile used in both directions.";
+             uses named-or-value-bandwidth-profile;
+           }
+         }
+         case asymmetrical {
+           description
+             "Ingress and egress bandwidth profiles can be specified.";
+           container ingress-bandwidth-profile {
+             description
+               "The bandwdith profile used in the ingress direction.";
+             uses named-or-value-bandwidth-profile;
+           }
+           container egress-bandwidth-profile {
+             description
+               "The bandwdith profile used in the egress direction.";
+             uses named-or-value-bandwidth-profile;
+           }
+         }
+       }
+     }
+
+     grouping etht-svc-access-parameters {
+       description
+         "ETH services access parameters";
+
+       leaf access-node-id {
+         type te-types:te-node-id;
+         description
+           "The identifier of the access node in
+            the ETH TE topology.";
+       }
+
+       leaf access-node-uri {
+         type nw:node-id;
+         description
+           "The identifier of the access node in the network.";
+       }
+
+       leaf access-ltp-id {
+         type te-types:te-tp-id;
+         description
+           "The TE link termination point identifier, used
+            together with access-node-id to identify the
+            access LTP.";
+       }
+
+       leaf access-ltp-uri {
+         type nt:tp-id;
+         description
+           "The link termination point identifier in network topology,
+           used together with access-node-uri to identify the
+           access LTP.";
+       }
+
+       leaf access-role {
+         type identityref {
+           base etht-types:access-role;
+         }
+         description
+           "Indicate the role of access, e.g., working or protection. ";
+       }
+
+       container pm-config {
+         uses pm-config-grouping;
+         description
+         "This grouping is used to set the threshold value for
+         performance monitoring. ";
+       }
+
+       container state {
+         config false;
+         description
+         "The state is used to monitor the status of service. ";
+         leaf operational-state {
+           type identityref {
+             base te-types:tunnel-state-type;
+           }
+           description
+           "Indicating the operational state of client signal. ";
+         }
+         leaf provisioning-state {
+           type identityref {
+             base te-types:lsp-state-type;
+           }
+           description
+           "Indicating the provisional state of client signal,
+           especially when there is a change, i.e., revise, create. ";
+         }
+       }
+
+       leaf performance {
+         type identityref {
+           base etht-types:performance;
+         }
+         config false;
+         description
+           "Performance Monitoring for the service. ";
+       }
+
+     }
+
+     grouping etht-svc-tunnel-parameters {
+       description
+         "ETH services tunnel parameters.";
+       choice technology {
+         description
+           "Service multiplexing is optional and flexible.";
+
+         case native-ethernet {
+           /*
+            placeholder to support proprietary multiplexing
+            (for further discussion)
+           */
+           list eth-tunnels {
+             key name;
+             description
+               "ETH Tunnel list in native Ethernet scenario.";
+             uses tunnels-grouping;
+           }
+         }
+
+         case frame-base {
+           list otn-tunnels {
+             key name;
+             description
+               "OTN Tunnel list in Frame-based scenario.";
+             uses tunnels-grouping;
+           }
+         }
+
+         case mpls-tp {
+           container pw {
+             description
+               "Pseudowire information for Ethernet over MPLS-TP.";
+             uses pw-segment-grouping;
+           }
+         }
+       }
+
+   /*
+    * Open issue: can we constraints it to be used only with mp services?
+    */
+       leaf src-split-horizon-group {
+         type string;
+         description
+         "Identify a split horizon group at the Tunnel source TTP";
+       }
+       leaf dst-split-horizon-group {
+         type string;
+         description
+         "Identify a split horizon group at the Tunnel destination TTP";
+       }
+     }
+
+     grouping  etht-svc-pm-threshold-config {
+       description
+         "Configuraiton parameters for Ethernet service PM thresholds.";
+
+       leaf sending-rate-high {
+         type uint64;
+         description
+           "High threshold of packet sending rate in kbps.";
+       }
+       leaf sending-rate-low {
+         type uint64;
+         description
+           "Low threshold of packet sending rate in kbps.";
+       }
+       leaf receiving-rate-high {
+         type uint64;
+         description
+           "High threshold of packet receiving rate in kbps.";
+       }
+       leaf receiving-rate-low {
+         type uint64;
+         description
+           "Low threshold of packet receiving rate in kbps.";
+       }
+     }
+
+     grouping  etht-svc-pm-stats {
+       description
+         "Ethernet service PM statistics.";
+
+       leaf sending-rate-too-high {
+         type uint32;
+         description
+           "Counter that indicates the number of times the
+           sending rate is above the high threshold";
+       }
+       leaf sending-rate-too-low {
+         type uint32;
+         description
+           "Counter that indicates the number of times the
+           sending rate is below the low threshold";
+       }
+       leaf receiving-rate-too-high {
+         type uint32;
+         description
+           "Counter that indicates the number of times the
+           receiving rate is above the high threshold";
+       }
+       leaf receiving-rate-too-low {
+         type uint32;
+         description
+           "Counter that indicates the number of times the
+           receiving rate is below the low threshold";
+       }
+     }
+
+     grouping  etht-svc-instance-config {
+       description
+         "Configuraiton parameters for Ethernet services.";
+
+       leaf etht-svc-name {
+         type string;
+         description
+           "Name of the ETH service.";
+       }
+
+       leaf etht-svc-title {
+         type string;
+         description
+           "The Identifier of the ETH service.";
+       }
+
+       leaf user-label {
+         type string;
+         description
+           "Alias of the ETH service.";
+       }
+
+       leaf etht-svc-descr {
+         type string;
+         description
+           "Description of the ETH service.";
+       }
+
+       leaf etht-svc-customer {
+         type string;
+         description
+           "Customer of the ETH service.";
+       }
+
+        leaf etht-svc-type {
+         type etht-types:service-type;
+         description
+           "Type of ETH service (p2p, mp2mp or rmp).";
+         /* Add default as p2p */
+       }
+
+        leaf etht-svc-lifecycle {
+         type etht-types:lifecycle-status;
+         description
+           "Lifecycle state of ETH service.";
+         /* Add default as installed  */
+       }
+       uses te-types:te-topology-identifier;
+
+       uses resilience-grouping;
+       list etht-svc-end-points {
+         key etht-svc-end-point-name;
+         description
+           "The logical end point for the ETH service. ";
+         uses etht-svc-end-point-grouping;
+       }
+
+       container alarm-shreshold {
+         description "threshold configuration for the E2E client signal";
+         uses alarm-shreshold-grouping;
+       }
+
+       container underlay {
+         description
+           "The unterlay tunnel information that carrying the
+           ETH service. ";
+         uses etht-svc-tunnel-parameters;
+       }
+
+       leaf admin-status {
+         type identityref {
+           base te-types:tunnel-admin-state-type;
+         }
+         default te-types:tunnel-admin-state-up;
+         description "ETH service administrative state.";
+       }
+     }
+
+     grouping  etht-svc-instance-state {
+       description
+         "State parameters for Ethernet services.";
+
+       leaf operational-state {
+       type identityref {
+           base te-types:tunnel-state-type;
+         }
+         default te-types:tunnel-state-up;
+       description "ETH service operational state.";
+       }
+       leaf provisioning-state {
+         type identityref {
+           base te-types:lsp-state-type;
+         }
+         description "ETH service provisioning state.";
+       }
+       leaf creation-time {
+         type yang:date-and-time;
+         description
+           "Time of ETH service creation.";
+       }
+       leaf last-updated-time {
+         type yang:date-and-time;
+         description
+           "Time of ETH service last update.";
+       }
+
+       leaf created-by {
+          type string;
+          description
+            "The client signal is created by whom,
+             can be a system or staff ID.";
+        }
+        leaf last-updated-by {
+          type string;
+          description
+            "The client signal is last updated by whom,
+             can be a system or staff ID.";
+        }
+        leaf owned-by {
+          type string;
+          description
+            "The client signal is last updated by whom,
+             can be a system ID.";
+        }
+        container pm-state {
+          description
+            "PM data of E2E Ethernet service";
+          uses pm-state-grouping;
+        }
+        container error-info {
+          description "error messages of configuration";
+          uses error-info-grouping;
+        }
+     }
+
+     grouping pm-state-grouping {
+       leaf latency {
+         description
+           "latency value of the E2E Ethernet service";
+         type uint32;
+         units microsecond;
+       }
+     }
+
+     grouping error-info-grouping {
+       leaf error-code {
+         description "error code";
+         type uint16;
+       }
+
+       leaf error-description {
+         description "detail message of error";
+         type string;
+       }
+
+       leaf error-timestamp {
+         description "the date and time error is happened";
+         type yang:date-and-time;
+       }
+     }
+
+     grouping alarm-shreshold-grouping {
+       leaf latency-threshold {
+         description "a threshold for the E2E client signal service's
+         latency. Once the latency value exceed this threshold, an alarm
+         should be triggered.";
+         type uint32;
+         units microsecond;
+       }
+     }
+
+     /*
+      * Data nodes
+      */
+
+     container etht-svc {
+       description
+         "ETH services.";
+
+       container globals {
+         description
+           "Globals Ethernet configuration data container";
+         list named-bandwidth-profiles {
+           key bandwidth-profile-name;
+           description
+             "List of named bandwidth profiles used by
+              Ethernet services.";
+
+           leaf bandwidth-profile-name {
+             type string;
+             description
+               "Name of the bandwidth profile.";
+           }
+           uses etht-types:etht-bandwidth-profiles;
+         }
+       }
+       list etht-svc-instances {
+         key etht-svc-name;
+         description
+           "The list of p2p ETH service instances";
+
+         uses etht-svc-instance-config;
+
+         container state {
+           config false;
+           description
+             "Ethernet Service states.";
+
+           uses etht-svc-instance-state;
+         }
+       }
+     }
+
+     grouping resilience-grouping {
+       description
+         "Grouping for resilience configuration. ";
+       container resilience {
+       description
+         "To configure the data plane protection parameters,
+         currently a placeholder only, future candidate attributes
+         include, Revert, WTR, Hold-off Timer, ...";
+         uses te:protection-restoration-properties;
+       }
+     }
+
+     grouping etht-svc-end-point-grouping {
+       description
+         "Grouping for the end point configuration.";
+       leaf etht-svc-end-point-name {
+         type string;
+         description
+         "The name of the logical end point of ETH service. ";
+       }
+
+       leaf etht-svc-end-point-id {
+         type string;
+         description
+         "The identifier of the logical end point of ETH service.";
+       }
+
+       leaf etht-svc-end-point-descr {
+         type string;
+         description
+         "The description of the logical end point of ETH service. ";
+       }
+
+       leaf topology-role {
+         type identityref {
+           base etht-types:topology-role;
+         }
+         description
+         "Indicating the underlay topology role,
+         e.g., hub,spoke, any-to-any ";
+       }
+
+       container resilience {
+         description
+         "Placeholder for resilience configuration, for future study. ";
+       }
+
+       list etht-svc-access-points {
+         key access-point-id;
+         min-elements "1";
+   /*
+     Open Issue:
+       Is it possible to limit the max-elements only for p2p services?
+         max-elements "2";
+   */
+         description
+           "List of the ETH trasport services access point instances.";
+
+         leaf access-point-id {
+           type string;
+           description
+             "ID of the service access point instance";
+         }
+         uses etht-svc-access-parameters;
+       }
+
+       leaf service-classification-type {
+         type identityref {
+           base etht-types:service-classification-type;
+         }
+         description
+           "Service classification type.";
+       }
+
+       choice service-classification {
+         description
+           "Access classification can be port-based or
+            VLAN based.";
+         case port-classification {
+           /* no additional information */
+         }
+
+         case vlan-classification {
+           container outer-tag {
+             presence "The outermost VLAN tag exists";
+             description
+               "Classifies traffic using the outermost VLAN tag.";
+
+             uses vlan-classification;
+           }
+           container second-tag {
+             must
+               '../outer-tag/tag-type = "etht-types:classify-s-vlan" and ' +
+               'tag-type = "etht-types:classify-c-vlan"'
+             {
+               error-message
+                 "
+                   When matching two tags, the outermost tag must be
+                   specified and of S-VLAN type and the second
+                   outermost tag must be of C-VLAN tag type.
+                 ";
+               description
+                 "
+                   For IEEE 802.1Q interoperability, when matching two
+                   tags, it is required that the outermost tag exists
+                   and is an S-VLAN, and the second outermost tag is a
+                   C-VLAN.
+                 ";
+             }
+             presence "The second outermost VLAN tag exists";
+
+             description
+               "Classifies traffic using the second outermost VLAN tag.";
+
+             uses vlan-classification;
+           }
+         }
+       }
+
+   /*
+    * Open issue: can we constraints it to be used only with mp services?
+    */
+       leaf split-horizon-group {
+         type string;
+         description "Identify a split horizon group";
+       }
+       uses bandwidth-profiles;
+
+       container vlan-operations {
+         description
+           "Configuration of VLAN operations.";
+         choice direction {
+           description
+             "Whether the VLAN operations are symmetrical or
+              asymmetrical";
+           case symmetrical {
+             container symmetrical-operation {
+               uses vlan-operations;
+               description
+                 "Symmetrical operations.
+                  Expressed in the ingress direction, but
+                  the reverse operation is applied to egress traffic";
+             }
+           }
+           case asymmetrical {
+             container asymmetrical-operation {
+               description "Asymmetrical operations";
+               container ingress {
+                 uses vlan-operations;
+                 description "Ingress operations";
+               }
+               container egress {
+                 uses vlan-operations;
+                 description "Egress operations";
+               }
+             }
+           }
+         }
+       }
+     }
+
+     grouping pm-config-grouping {
+       description
+         "Grouping used for Performance Monitoring Configuration. ";
+       leaf pm-enable {
+         type boolean;
+         description
+         "Whether to enable the performance monitoring.";
+       }
+
+       leaf sending-rate-high {
+         type uint64;
+         description
+         "The upperbound of sending rate.";
+       }
+
+       leaf sending-rate-low {
+         type uint64;
+         description
+         "The lowerbound of sending rate.";
+       }
+
+       leaf receiving-rate-high {
+         type uint64;
+         description
+         "The upperbound of receiving rate.";
+       }
+
+       leaf receiving-rate-low {
+         type uint64;
+         description
+         "The lowerbound of receiving rate.";
+       }
+     }
+
+     grouping pw-segment-grouping {
+       description
+         "Grouping used for PW configuration. ";
+       leaf pw-id {
+         type string;
+         description
+         "The Identifier information of pseudowire. ";
+       }
+
+       leaf pw-name {
+         type string;
+         description
+         "The name information of pseudowire.";
+       }
+
+       leaf transmit-label {
+         type rt-types:mpls-label;
+         description
+         "Transmit label information in PW. ";
+       }
+
+       leaf receive-label {
+         type rt-types:mpls-label;
+         description
+         "Receive label information in PW. ";
+       }
+       leaf encapsulation-type {
+         type identityref {
+           base etht-types:encapsulation-type;
+         }
+         description
+           "The encapsulation type, raw or tag. ";
+       }
+
+       leaf oper-status {
+         type identityref {
+           base te-types:tunnel-state-type;
+         }
+         config false;
+         description
+           "The operational state of the PW segment. ";
+       }
+
+       container ingress-bandwidth-profile {
+         description
+           "Bandwidth Profile for ingress. ";
+         uses pw-segment-named-or-value-bandwidth-profile;
+       }
+
+       list pw-paths {
+         key path-id;
+         description
+           "A list of pw paths. ";
+
+         leaf path-id {
+           type uint8;
+           description
+             "The identifier of pw paths. ";
+
+         }
+
+         list tp-tunnels {
+           key name;
+           description
+             "Names of TP Tunnel underlay";
+           leaf name {
+             type string;
+             description
+               "Names of TP Tunnel underlay";
+             }
+         }
+       }
+
+     }
+     grouping pw-segment-named-or-value-bandwidth-profile {
+       description
+         "A grouping to configure a bandwdith profile either by
+          referencing a named bandwidth profile or by
+          configuring the values of the bandwidth profile attributes.";
+       choice style {
+         description
+           "Whether the bandwidth profile is named or defined by value";
+         case named {
+           description
+             "Named bandwidth profile.";
+           leaf bandwidth-profile-name {
+             type leafref {
+               path "/ethtsvc:etht-svc/ethtsvc:globals/"
+               + "ethtsvc:named-bandwidth-profiles/"
+               + "ethtsvc:bandwidth-profile-name";
+             }
+             description
+               "Name of the bandwidth profile.";
+           }
+         }
+         case value {
+           description
+             "Bandwidth profile configured by value.";
+           uses etht-types:pw-segement-bandwidth-profile-grouping;
+         }
+       }
+     }
+
+     grouping tunnels-grouping {
+       description
+         "A group of tunnels. ";
+       leaf name {
+         type leafref {
+           path "/te:te/te:tunnels/te:tunnel/te:name";
+           require-instance false;
+         }
+         description "Dependency tunnel name";
+       }
+       leaf encoding {
+         type identityref {
+           base te-types:lsp-encoding-types;
+         }
+         description "LSP encoding type";
+         reference "RFC3945";
+       }
+       leaf switching-type {
+         type identityref {
+           base te-types:switching-capabilities;
+         }
+         description "LSP switching type";
+         reference "RFC3945";
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-types@2023-10-23.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-types@2023-10-23.yang
new file mode 100644
index 0000000000000000000000000000000000000000..f46908b34f3cc30a0b19359c032a7cd8856b1b08
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-eth-tran-types@2023-10-23.yang
@@ -0,0 +1,457 @@
+ module ietf-eth-tran-types {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-types";
+
+     prefix "etht-types";
+
+     organization
+       "Internet Engineering Task Force (IETF) CCAMP WG";
+     contact
+       "
+         WG List: <mailto:ccamp@ietf.org>
+
+         ID-draft editor:
+           Haomian Zheng (zhenghaomian@huawei.com);
+           Italo Busi (italo.busi@huawei.com);
+           Aihua Guo (aihuaguo.ietf@gmail.com);
+           Anton Snitser (antons@sedonasys.com);
+           Francesco Lazzeri (francesco.lazzeri@ericsson.com);
+           Yunbin Xu (xuyunbin@caict.ac.cn);
+           Yang Zhao (zhaoyangyjy@chinamobile.com);
+           Xufeng Liu (xufeng.liu.ietf@gmail.com);
+           Giuseppe Fioccola (giuseppe.fioccola@huawei.com);
+           Chaode Yu (yuchaode@huawei.com)
+       ";
+
+     description
+       "This module defines the ETH types.
+        The model fully conforms to the Network Management
+        Datastore Architecture (NMDA).
+
+        Copyright (c) 2019 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.";
+
+     revision 2023-10-23 {
+       description
+         "version -05 as a WG draft";
+       reference
+         "draft-ietf-ccamp-client-signal-yang";
+     }
+
+     /*
+      * Identities
+      */
+
+     identity eth-vlan-tag-type {
+       description
+         "ETH VLAN tag type.";
+     }
+
+     identity c-vlan-tag-type {
+       base eth-vlan-tag-type;
+       description
+         "802.1Q Customer VLAN";
+     }
+
+     identity s-vlan-tag-type {
+       base eth-vlan-tag-type;
+       description
+         "802.1Q Service VLAN (QinQ)";
+     }
+
+     identity service-classification-type {
+       description
+         "Service classification.";
+     }
+
+     identity port-classification {
+       base service-classification-type;
+       description
+         "Port classification.";
+     }
+     identity vlan-classification {
+       base service-classification-type;
+       description
+         "VLAN classification.";
+     }
+
+     identity eth-vlan-tag-classify {
+       description
+         "VLAN tag classification.";
+     }
+
+     identity classify-c-vlan {
+       base eth-vlan-tag-classify;
+       description
+         "Classify 802.1Q Customer VLAN tag.
+          Only C-tag type is accepted";
+     }
+
+     identity classify-s-vlan {
+       base eth-vlan-tag-classify;
+       description
+         "Classify 802.1Q Service VLAN (QinQ) tag.
+          Only S-tag type is accepted";
+     }
+
+     identity classify-s-or-c-vlan {
+       base eth-vlan-tag-classify;
+       description
+         "Classify S-VLAN or C-VLAN tag-classify.
+          Either tag is accepted";
+     }
+
+     identity bandwidth-profile-type-ir {
+       description
+         "Bandwidth Profile Types";
+     }
+
+     identity mef-10-bwp {
+       base bandwidth-profile-type-ir;
+       description
+         "MEF 10 Bandwidth Profile";
+     }
+
+     identity rfc-2697-bwp {
+       base bandwidth-profile-type-ir;
+       description
+         "RFC 2697 Bandwidth Profile";
+     }
+     identity rfc-2698-bwp {
+       base bandwidth-profile-type-ir;
+       description
+         "RFC 2698 Bandwidth Profile";
+     }
+
+     identity rfc-4115-bwp {
+       base bandwidth-profile-type-ir;
+       description
+         "RFC 4115 Bandwidth Profile";
+     }
+
+     identity service-type-ir {
+       description
+         "Type of Ethernet service.";
+     }
+
+     identity p2p-svc {
+       base service-type-ir;
+       description
+         "Ethernet point-to-point service (EPL, EVPL).";
+     }
+
+     identity rmp-svc {
+       base service-type-ir;
+       description
+         "Ethernet rooted-multitpoint service (E-TREE, EP-TREE).";
+     }
+
+     identity mp2mp-svc {
+       base service-type-ir;
+       description
+         "Ethernet multipoint-to-multitpoint service (E-LAN, EP-LAN).";
+     }
+
+     identity lifecycle-status-ir {
+       description
+         "Lifecycle Status.";
+     }
+
+     identity installed {
+       base lifecycle-status-ir;
+       description
+         "Installed.";
+     }
+
+     identity planned {
+       base lifecycle-status-ir;
+       description
+         "Planned.";
+     }
+
+     identity pending-removal {
+       base lifecycle-status-ir;
+       description
+         "Pending Removal.";
+     }
+
+     /*
+      * Type Definitions
+      */
+
+     typedef eth-tag-type {
+       type identityref {
+         base eth-vlan-tag-type;
+       }
+       description
+         "Identifies a specific ETH VLAN tag type.";
+     }
+
+     typedef eth-tag-classify {
+       type identityref {
+         base eth-vlan-tag-classify;
+       }
+       description
+         "Identifies a specific VLAN tag classification.";
+     }
+
+     typedef vlanid {
+       type uint16 {
+         range "1..4094";
+       }
+       description
+         "The 12-bit VLAN-ID used in the VLAN Tag header.";
+     }
+
+     typedef vid-range-type {
+       type string {
+         pattern "([1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?" +
+                 "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)";
+       }
+       description
+         "A list of VLAN Ids, or non overlapping VLAN ranges, in
+          ascending order, between 1 and 4094.
+          This type is used to match an ordered list of VLAN Ids, or
+          contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the
+          range 1 to 4094, and included in the list in non overlapping
+          ascending order.
+
+          For example: 1,10-100,50,500-1000";
+     }
+
+     typedef bandwidth-profile-type {
+       type identityref {
+         base bandwidth-profile-type-ir;
+       }
+       description
+         "Identifies a specific Bandwidth Profile type.";
+     }
+
+     typedef service-type {
+       type identityref {
+         base service-type-ir;
+       }
+       description
+         "Identifies the type of Ethernet service.";
+     }
+
+     typedef lifecycle-status {
+       type identityref {
+         base lifecycle-status-ir;
+       }
+       description
+         "Identifies the lLifecycle Status .";
+     }
+
+     /*
+      * Grouping Definitions
+      */
+
+     grouping etht-bandwidth-profiles {
+       description
+         "Bandwidth profile configuration paramters.";
+
+       leaf bandwidth-profile-type {
+         type etht-types:bandwidth-profile-type;
+         description
+           "The type of bandwidth profile.";
+       }
+       leaf CIR {
+         type uint64;
+         description
+           "Committed Information Rate in Kbps";
+       }
+       leaf CBS {
+         type uint64;
+         description
+           "Committed Burst Size in in KBytes";
+       }
+       leaf EIR {
+         type uint64;
+         /* Need to indicate that EIR is not supported by RFC 2697
+
+         must
+           '../bw-profile-type = "mef-10-bwp" or ' +
+           '../bw-profile-type = "rfc-2698-bwp" or ' +
+           '../bw-profile-type = "rfc-4115-bwp"'
+
+         must
+           '../bw-profile-type != "rfc-2697-bwp"'
+         */
+         description
+           "Excess Information Rate in Kbps
+            In case of RFC 2698, PIR = CIR + EIR";
+       }
+       leaf EBS {
+         type uint64;
+         description
+           "Excess Burst Size in KBytes.
+             In case of RFC 2698, PBS = CBS + EBS";
+       }
+       leaf color-aware {
+         type boolean;
+         description
+           "Indicates weather the color-mode is
+           color-aware or color-blind.";
+       }
+       leaf coupling-flag {
+         type boolean;
+         /* Need to indicate that Coupling Flag is defined only for MEF 10
+
+         must
+           '../bw-profile-type = "mef-10-bwp"'
+         */
+         description
+           "Coupling Flag.";
+       }
+     }
+
+     identity topology-role {
+       description
+         "The role of underlay topology: e.g., hub, spoke,
+         any-to-any.";
+     }
+
+     identity resilience {
+       description
+       "Placeholder for resilience information in data plane,
+       for future study. ";
+     }
+
+     identity access-role {
+       description
+       "Indicating whether the access is a working or protection access.";
+     }
+
+     identity root-primary {
+       base access-role;
+       description
+         "Designates the primary root UNI of an E-Tree service, and may also
+              designates the UNI access role of E-LINE and E-LAN service.";
+     }
+
+     identity root-backup {
+       base access-role;
+       description
+         "Designates the backup root UNI of an E-Tree service.";
+     }
+
+     identity leaf-access {
+       base access-role;
+       description
+         "Designates the leaf UNI of an E-Tree service.";
+     }
+
+     identity leaf-edge {
+       base access-role;
+       description "";
+     }
+
+     identity performance {
+       description
+       "Placeholder for performance information, for future study.";
+     }
+
+     identity encapsulation-type {
+       description
+       "Indicating how the service is encapsulated (to PW), e.g, raw or tag. ";
+     }
+     grouping pw-segement-bandwidth-profile-grouping {
+       description
+         "bandwidth profile grouping for PW segment. ";
+       leaf bandwidth-profile-type {
+         type etht-types:bandwidth-profile-type;
+         description
+           "The type of bandwidth profile.";
+       }
+       leaf CIR {
+         type uint64;
+         description
+           "Committed Information Rate in Kbps";
+       }
+       leaf CBS {
+         type uint64;
+         description
+           "Committed Burst Size in in KBytes";
+       }
+       leaf EIR {
+         type uint64;
+         /* Need to indicate that EIR is not supported by RFC 2697
+
+         must
+           '../bw-profile-type = "mef-10-bwp" or ' +
+           '../bw-profile-type = "rfc-2698-bwp" or ' +
+           '../bw-profile-type = "rfc-4115-bwp"'
+
+         must
+           '../bw-profile-type != "rfc-2697-bwp"'
+         */
+         description
+           "Excess Information Rate in Kbps
+            In case of RFC 2698, PIR = CIR + EIR";
+       }
+       leaf EBS {
+         type uint64;
+         description
+           "Excess Burst Size in KBytes.
+             In case of RFC 2698, PBS = CBS + EBS";
+       }
+     }
+         grouping eth-bandwidth {
+         description
+           "Available bandwith for ethernet.";
+         leaf eth-bandwidth {
+           type uint64{
+             range "0..10000000000";
+           }
+           units "Kbps";
+           description
+             "Available bandwith value expressed in kilobits per second";
+         }
+       }
+
+       grouping eth-label-restriction {
+         description
+           "Label Restriction for ethernet.";
+         leaf tag-type {
+           type etht-types:eth-tag-type;
+           description "VLAN tag type.";
+         }
+         leaf priority {
+           type uint8;
+           description "priority.";
+         }
+       }
+       grouping eth-label {
+         description
+           "Label for ethernet.";
+         leaf vlanid {
+           type etht-types:vlanid;
+             description
+               "VLAN tag id.";
+         }
+       }
+
+       grouping eth-label-step {
+         description "Label step for Ethernet VLAN";
+         leaf eth-step {
+           type uint16 {
+             range "1..4095";
+         }
+         default 1;
+         description
+           "Label step which represent possible increments for
+            an Ethernet VLAN tag.";
+         reference
+           "IEEE 802.1ad: Provider Bridges.";
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ethertypes@2019-03-04.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ethertypes@2019-03-04.yang
new file mode 100644
index 0000000000000000000000000000000000000000..fd055074aeba5c277bbefdce0b81ebd24d0d3551
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-ethertypes@2019-03-04.yang
@@ -0,0 +1,381 @@
+module ietf-ethertypes {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-ethertypes";
+  prefix ethertypes;
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group.";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     Editor:   Mahesh Jethanandani
+               <mjethanandani@gmail.com>";
+
+  description
+    "This module contains common definitions for the
+     Ethertype used by different modules.  It is a
+     placeholder module, till such time that IEEE
+     starts a project to define these Ethertypes
+     and publishes a standard.
+
+     At that time, this module can be deprecated.
+
+     Copyright (c) 2019 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's Legal
+     Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8519; see
+     the RFC itself for full legal notices.";
+
+  revision 2019-03-04 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8519: YANG Data Model for Network Access Control
+                 Lists (ACLs).";
+  }
+
+  typedef ethertype {
+    type union {
+      type uint16;
+      type enumeration {
+        enum ipv4 {
+          value 2048;
+          description
+            "Internet Protocol version 4 (IPv4) with a
+             hex value of 0x0800.";
+          reference
+            "RFC 791: Internet Protocol.";
+        }
+        enum arp {
+          value 2054;
+          description
+            "Address Resolution Protocol (ARP) with a
+             hex value of 0x0806.";
+          reference
+            "RFC 826: An Ethernet Address Resolution Protocol: Or
+                      Converting Network Protocol Addresses to 48.bit
+                      Ethernet Address for Transmission on Ethernet
+                      Hardware.";
+        }
+        enum wlan {
+          value 2114;
+          description
+            "Wake-on-LAN.  Hex value of 0x0842.";
+        }
+        enum trill {
+          value 8947;
+          description
+            "Transparent Interconnection of Lots of Links.
+             Hex value of 0x22F3.";
+          reference
+            "RFC 6325: Routing Bridges (RBridges): Base Protocol
+                       Specification.";
+        }
+        enum srp {
+          value 8938;
+          description
+            "Stream Reservation Protocol.  Hex value of
+             0x22EA.";
+          reference
+            "IEEE 801.1Q-2011.";
+        }
+        enum decnet {
+          value 24579;
+          description
+            "DECnet Phase IV.  Hex value of 0x6003.";
+        }
+        enum rarp {
+          value 32821;
+          description
+            "Reverse Address Resolution Protocol.
+             Hex value 0x8035.";
+          reference
+            "RFC 903: A Reverse Address Resolution Protocol.";
+        }
+        enum appletalk {
+          value 32923;
+          description
+            "Appletalk (Ethertalk).  Hex value of 0x809B.";
+        }
+        enum aarp {
+          value 33011;
+          description
+            "Appletalk Address Resolution Protocol.  Hex value
+             of 0x80F3.";
+        }
+        enum vlan {
+          value 33024;
+          description
+            "VLAN-tagged frame (IEEE 802.1Q) and Shortest Path
+             Bridging IEEE 802.1aq with Network-Network
+             Interface (NNI) compatibility.  Hex value of
+             0x8100.";
+          reference
+            "IEEE 802.1Q.";
+        }
+        enum ipx {
+          value 33079;
+          description
+            "Internetwork Packet Exchange (IPX).  Hex value
+             of 0x8137.";
+        }
+        enum qnx {
+          value 33284;
+          description
+            "QNX Qnet.  Hex value of 0x8204.";
+        }
+        enum ipv6 {
+          value 34525;
+          description
+            "Internet Protocol Version 6 (IPv6).  Hex value
+             of 0x86DD.";
+          reference
+            "RFC 8200: Internet Protocol, Version 6 (IPv6)
+                       Specification
+             RFC 8201: Path MTU Discovery for IP version 6.";
+        }
+        enum efc {
+          value 34824;
+          description
+            "Ethernet flow control using pause frames.
+             Hex value of 0x8808.";
+          reference
+            "IEEE 802.1Qbb.";
+        }
+        enum esp {
+          value 34825;
+          description
+            "Ethernet Slow Protocol.  Hex value of 0x8809.";
+          reference
+            "IEEE 802.3-2015.";
+        }
+        enum cobranet {
+          value 34841;
+          description
+            "CobraNet.  Hex value of 0x8819.";
+        }
+        enum mpls-unicast {
+          value 34887;
+          description
+            "Multiprotocol Label Switching (MPLS) unicast traffic.
+             Hex value of 0x8847.";
+          reference
+            "RFC 3031: Multiprotocol Label Switching Architecture.";
+        }
+        enum mpls-multicast {
+          value 34888;
+          description
+            "MPLS multicast traffic.  Hex value of 0x8848.";
+          reference
+            "RFC 3031: Multiprotocol Label Switching Architecture.";
+        }
+        enum pppoe-discovery {
+          value 34915;
+          description
+            "Point-to-Point Protocol over Ethernet.  Used during
+             the discovery process.  Hex value of 0x8863.";
+          reference
+            "RFC 2516: A Method for Transmitting PPP Over Ethernet
+                       (PPPoE).";
+        }
+        enum pppoe-session {
+          value 34916;
+          description
+            "Point-to-Point Protocol over Ethernet.  Used during
+             session stage.  Hex value of 0x8864.";
+          reference
+            "RFC 2516: A Method for Transmitting PPP Over Ethernet
+                       (PPPoE).";
+        }
+        enum intel-ans {
+          value 34925;
+          description
+            "Intel Advanced Networking Services.  Hex value of
+             0x886D.";
+        }
+        enum jumbo-frames {
+          value 34928;
+          description
+            "Jumbo frames or Ethernet frames with more than
+             1500 bytes of payload, up to 9000 bytes.";
+        }
+        enum homeplug {
+          value 34939;
+          description
+            "Family name for the various power line
+             communications.  Hex value of 0x887B.";
+        }
+        enum eap {
+          value 34958;
+          description
+            "Ethernet Access Protocol (EAP) over LAN.  Hex value
+             of 0x888E.";
+          reference
+            "IEEE 802.1X.";
+        }
+        enum profinet {
+          value 34962;
+          description
+            "PROcess FIeld Net (PROFINET).  Hex value of 0x8892.";
+        }
+        enum hyperscsi {
+          value 34970;
+          description
+            "Small Computer System Interface (SCSI) over Ethernet.
+             Hex value of 0x889A.";
+        }
+        enum aoe {
+          value 34978;
+          description
+            "Advanced Technology Advancement (ATA) over Ethernet.
+             Hex value of 0x88A2.";
+        }
+        enum ethercat {
+          value 34980;
+          description
+            "Ethernet for Control Automation Technology (EtherCAT).
+             Hex value of 0x88A4.";
+        }
+        enum provider-bridging {
+          value 34984;
+          description
+            "Provider Bridging (802.1ad) and Shortest Path Bridging
+             (801.1aq).  Hex value of 0x88A8.";
+          reference
+            "IEEE 802.1ad and IEEE 802.1aq).";
+        }
+        enum ethernet-powerlink {
+          value 34987;
+          description
+            "Ethernet Powerlink.  Hex value of 0x88AB.";
+        }
+        enum goose {
+          value 35000;
+          description
+            "Generic Object Oriented Substation Event (GOOSE).
+             Hex value of 0x88B8.";
+          reference
+            "IEC/ISO 8802-2 and 8802-3.";
+        }
+        enum gse {
+          value 35001;
+          description
+            "Generic Substation Events.  Hex value of 88B9.";
+          reference
+            "IEC 61850.";
+        }
+        enum sv {
+          value 35002;
+          description
+            "Sampled Value Transmission.  Hex value of 0x88BA.";
+          reference
+            "IEC 61850.";
+        }
+        enum lldp {
+          value 35020;
+          description
+            "Link Layer Discovery Protocol (LLDP).  Hex value of
+             0x88CC.";
+          reference
+            "IEEE 802.1AB.";
+        }
+        enum sercos {
+          value 35021;
+          description
+            "Sercos Interface.  Hex value of 0x88CD.";
+        }
+        enum wsmp {
+          value 35036;
+          description
+            "WAVE Short Message Protocol (WSMP).  Hex value of
+             0x88DC.";
+        }
+        enum homeplug-av-mme {
+          value 35041;
+          description
+            "HomePlug AV Mobile Management Entity (MME).  Hex value
+             of 88E1.";
+        }
+        enum mrp {
+          value 35043;
+          description
+            "Media Redundancy Protocol (MRP).  Hex value of
+             0x88E3.";
+          reference
+            "IEC 62439-2.";
+        }
+        enum macsec {
+          value 35045;
+          description
+            "MAC Security.  Hex value of 0x88E5.";
+          reference
+            "IEEE 802.1AE.";
+        }
+        enum pbb {
+          value 35047;
+          description
+            "Provider Backbone Bridges (PBB).  Hex value of
+             0x88E7.";
+          reference
+            "IEEE 802.1ah.";
+        }
+        enum cfm {
+          value 35074;
+          description
+            "Connectivity Fault Management (CFM).  Hex value of
+             0x8902.";
+          reference
+            "IEEE 802.1ag.";
+        }
+        enum fcoe {
+          value 35078;
+          description
+            "Fiber Channel over Ethernet (FCoE).  Hex value of
+             0x8906.";
+          reference
+            "T11 FC-BB-5.";
+        }
+        enum fcoe-ip {
+          value 35092;
+          description
+            "FCoE Initialization Protocol.  Hex value of 0x8914.";
+        }
+        enum roce {
+          value 35093;
+          description
+            "RDMA over Converged Ethernet (RoCE).  Hex value of
+             0x8915.";
+        }
+        enum tte {
+          value 35101;
+          description
+            "TTEthernet Protocol Control Frame (TTE).  Hex value
+             of 0x891D.";
+          reference
+            "SAE AS6802.";
+        }
+        enum hsr {
+          value 35119;
+          description
+            "High-availability Seamless Redundancy (HSR).  Hex
+             value of 0x892F.";
+          reference
+            "IEC 62439-3:2016.";
+        }
+      }
+    }
+    description
+      "The uint16 type placeholder is defined to enable
+       users to manage their own ethertypes not
+       covered by the module.  Otherwise, the module contains
+       enum definitions for the more commonly used ethertypes.";
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-inet-types@2013-07-15.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-inet-types@2013-07-15.yang
new file mode 100644
index 0000000000000000000000000000000000000000..790bafc31dd7dc3582ef1c765fe104145b8a6016
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-inet-types@2013-07-15.yang
@@ -0,0 +1,459 @@
+   module ietf-inet-types {
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+     prefix "inet";
+
+     organization
+      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+     contact
+      "WG Web:   <http://tools.ietf.org/wg/netmod/>
+       WG List:  <mailto:netmod@ietf.org>
+
+       WG Chair: David Kessens
+                 <mailto:david.kessens@nsn.com>
+
+       WG Chair: Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>
+
+       Editor:   Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>";
+
+     description
+      "This module contains a collection of generally useful derived
+       YANG data types for Internet addresses and related things.
+
+       Copyright (c) 2013 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC 6991; see
+       the RFC itself for full legal notices.";
+
+     revision 2013-07-15 {
+       description
+        "This revision adds the following new data types:
+         - ip-address-no-zone
+         - ipv4-address-no-zone
+         - ipv6-address-no-zone";
+       reference
+        "RFC 6991: Common YANG Data Types";
+     }
+
+     revision 2010-09-24 {
+       description
+        "Initial revision.";
+       reference
+        "RFC 6021: Common YANG Data Types";
+     }
+
+     /*** collection of types related to protocol fields ***/
+
+     typedef ip-version {
+       type enumeration {
+         enum unknown {
+           value "0";
+           description
+            "An unknown or unspecified version of the Internet
+             protocol.";
+         }
+         enum ipv4 {
+           value "1";
+           description
+            "The IPv4 protocol as defined in RFC 791.";
+         }
+         enum ipv6 {
+           value "2";
+           description
+            "The IPv6 protocol as defined in RFC 2460.";
+         }
+       }
+       description
+        "This value represents the version of the IP protocol.
+
+         In the value set and its semantics, this type is equivalent
+         to the InetVersion textual convention of the SMIv2.";
+       reference
+        "RFC  791: Internet Protocol
+         RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+         RFC 4001: Textual Conventions for Internet Network Addresses";
+     }
+
+     typedef dscp {
+       type uint8 {
+         range "0..63";
+       }
+       description
+        "The dscp type represents a Differentiated Services Code Point
+         that may be used for marking packets in a traffic stream.
+
+         In the value set and its semantics, this type is equivalent
+         to the Dscp textual convention of the SMIv2.";
+       reference
+        "RFC 3289: Management Information Base for the Differentiated
+                   Services Architecture
+         RFC 2474: Definition of the Differentiated Services Field
+                   (DS Field) in the IPv4 and IPv6 Headers
+         RFC 2780: IANA Allocation Guidelines For Values In
+                   the Internet Protocol and Related Headers";
+     }
+
+     typedef ipv6-flow-label {
+       type uint32 {
+         range "0..1048575";
+       }
+       description
+        "The ipv6-flow-label type represents the flow identifier or Flow
+         Label in an IPv6 packet header that may be used to
+         discriminate traffic flows.
+
+         In the value set and its semantics, this type is equivalent
+         to the IPv6FlowLabel textual convention of the SMIv2.";
+       reference
+        "RFC 3595: Textual Conventions for IPv6 Flow Label
+         RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+     }
+
+     typedef port-number {
+       type uint16 {
+         range "0..65535";
+       }
+       description
+        "The port-number type represents a 16-bit port number of an
+         Internet transport-layer protocol such as UDP, TCP, DCCP, or
+         SCTP.  Port numbers are assigned by IANA.  A current list of
+         all assignments is available from <http://www.iana.org/>.
+
+         Note that the port number value zero is reserved by IANA.  In
+         situations where the value zero does not make sense, it can
+         be excluded by subtyping the port-number type.
+         In the value set and its semantics, this type is equivalent
+         to the InetPortNumber textual convention of the SMIv2.";
+       reference
+        "RFC  768: User Datagram Protocol
+         RFC  793: Transmission Control Protocol
+         RFC 4960: Stream Control Transmission Protocol
+         RFC 4340: Datagram Congestion Control Protocol (DCCP)
+         RFC 4001: Textual Conventions for Internet Network Addresses";
+     }
+
+     /*** collection of types related to autonomous systems ***/
+
+     typedef as-number {
+       type uint32;
+       description
+        "The as-number type represents autonomous system numbers
+         which identify an Autonomous System (AS).  An AS is a set
+         of routers under a single technical administration, using
+         an interior gateway protocol and common metrics to route
+         packets within the AS, and using an exterior gateway
+         protocol to route packets to other ASes.  IANA maintains
+         the AS number space and has delegated large parts to the
+         regional registries.
+
+         Autonomous system numbers were originally limited to 16
+         bits.  BGP extensions have enlarged the autonomous system
+         number space to 32 bits.  This type therefore uses an uint32
+         base type without a range restriction in order to support
+         a larger autonomous system number space.
+
+         In the value set and its semantics, this type is equivalent
+         to the InetAutonomousSystemNumber textual convention of
+         the SMIv2.";
+       reference
+        "RFC 1930: Guidelines for creation, selection, and registration
+                   of an Autonomous System (AS)
+         RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+         RFC 4001: Textual Conventions for Internet Network Addresses
+         RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+                   Number Space";
+     }
+
+     /*** collection of types related to IP addresses and hostnames ***/
+
+     typedef ip-address {
+       type union {
+         type inet:ipv4-address;
+         type inet:ipv6-address;
+       }
+       description
+        "The ip-address type represents an IP address and is IP
+         version neutral.  The format of the textual representation
+         implies the IP version.  This type supports scoped addresses
+         by allowing zone identifiers in the address format.";
+       reference
+        "RFC 4007: IPv6 Scoped Address Architecture";
+     }
+
+     typedef ipv4-address {
+       type string {
+         pattern
+           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+         +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+         + '(%[\p{N}\p{L}]+)?';
+       }
+       description
+         "The ipv4-address type represents an IPv4 address in
+          dotted-quad notation.  The IPv4 address may include a zone
+          index, separated by a % sign.
+
+          The zone index is used to disambiguate identical address
+          values.  For link-local addresses, the zone index will
+          typically be the interface index number or the name of an
+          interface.  If the zone index is not present, the default
+          zone of the device will be used.
+
+          The canonical format for the zone index is the numerical
+          format";
+     }
+
+     typedef ipv6-address {
+       type string {
+         pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+               + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+               + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+               + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+               + '(%[\p{N}\p{L}]+)?';
+         pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+               + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+               + '(%.+)?';
+       }
+       description
+        "The ipv6-address type represents an IPv6 address in full,
+         mixed, shortened, and shortened-mixed notation.  The IPv6
+         address may include a zone index, separated by a % sign.
+
+         The zone index is used to disambiguate identical address
+         values.  For link-local addresses, the zone index will
+         typically be the interface index number or the name of an
+         interface.  If the zone index is not present, the default
+         zone of the device will be used.
+
+         The canonical format of IPv6 addresses uses the textual
+         representation defined in Section 4 of RFC 5952.  The
+         canonical format for the zone index is the numerical
+         format as described in Section 11.2 of RFC 4007.";
+       reference
+        "RFC 4291: IP Version 6 Addressing Architecture
+         RFC 4007: IPv6 Scoped Address Architecture
+         RFC 5952: A Recommendation for IPv6 Address Text
+                   Representation";
+     }
+
+     typedef ip-address-no-zone {
+       type union {
+         type inet:ipv4-address-no-zone;
+         type inet:ipv6-address-no-zone;
+       }
+       description
+        "The ip-address-no-zone type represents an IP address and is
+         IP version neutral.  The format of the textual representation
+         implies the IP version.  This type does not support scoped
+         addresses since it does not allow zone identifiers in the
+         address format.";
+       reference
+        "RFC 4007: IPv6 Scoped Address Architecture";
+     }
+
+     typedef ipv4-address-no-zone {
+       type inet:ipv4-address {
+         pattern '[0-9\.]*';
+       }
+       description
+         "An IPv4 address without a zone index.  This type, derived from
+          ipv4-address, may be used in situations where the zone is
+          known from the context and hence no zone index is needed.";
+     }
+
+     typedef ipv6-address-no-zone {
+       type inet:ipv6-address {
+         pattern '[0-9a-fA-F:\.]*';
+       }
+       description
+         "An IPv6 address without a zone index.  This type, derived from
+          ipv6-address, may be used in situations where the zone is
+          known from the context and hence no zone index is needed.";
+       reference
+        "RFC 4291: IP Version 6 Addressing Architecture
+         RFC 4007: IPv6 Scoped Address Architecture
+         RFC 5952: A Recommendation for IPv6 Address Text
+                   Representation";
+     }
+
+     typedef ip-prefix {
+       type union {
+         type inet:ipv4-prefix;
+         type inet:ipv6-prefix;
+       }
+       description
+        "The ip-prefix type represents an IP prefix and is IP
+         version neutral.  The format of the textual representations
+         implies the IP version.";
+     }
+
+     typedef ipv4-prefix {
+       type string {
+         pattern
+            '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+          +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+          + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+       }
+       description
+        "The ipv4-prefix type represents an IPv4 address prefix.
+         The prefix length is given by the number following the
+         slash character and must be less than or equal to 32.
+
+         A prefix length value of n corresponds to an IP address
+         mask that has n contiguous 1-bits from the most
+         significant bit (MSB) and all other bits set to 0.
+
+         The canonical format of an IPv4 prefix has all bits of
+         the IPv4 address set to zero that are not part of the
+         IPv4 prefix.";
+     }
+
+     typedef ipv6-prefix {
+       type string {
+         pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+               + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+               + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+               + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+               + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+         pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+               + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+               + '(/.+)';
+       }
+
+       description
+        "The ipv6-prefix type represents an IPv6 address prefix.
+         The prefix length is given by the number following the
+         slash character and must be less than or equal to 128.
+
+         A prefix length value of n corresponds to an IP address
+         mask that has n contiguous 1-bits from the most
+         significant bit (MSB) and all other bits set to 0.
+
+         The IPv6 address should have all bits that do not belong
+         to the prefix set to zero.
+
+         The canonical format of an IPv6 prefix has all bits of
+         the IPv6 address set to zero that are not part of the
+         IPv6 prefix.  Furthermore, the IPv6 address is represented
+         as defined in Section 4 of RFC 5952.";
+       reference
+        "RFC 5952: A Recommendation for IPv6 Address Text
+                   Representation";
+     }
+
+     /*** collection of domain name and URI types ***/
+
+     typedef domain-name {
+       type string {
+         pattern
+           '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+         + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+         + '|\.';
+         length "1..253";
+       }
+       description
+        "The domain-name type represents a DNS domain name.  The
+         name SHOULD be fully qualified whenever possible.
+
+         Internet domain names are only loosely specified.  Section
+         3.5 of RFC 1034 recommends a syntax (modified in Section
+         2.1 of RFC 1123).  The pattern above is intended to allow
+         for current practice in domain name use, and some possible
+         future expansion.  It is designed to hold various types of
+         domain names, including names used for A or AAAA records
+         (host names) and other records, such as SRV records.  Note
+         that Internet host names have a stricter syntax (described
+         in RFC 952) than the DNS recommendations in RFCs 1034 and
+         1123, and that systems that want to store host names in
+         schema nodes using the domain-name type are recommended to
+         adhere to this stricter standard to ensure interoperability.
+
+         The encoding of DNS names in the DNS protocol is limited
+         to 255 characters.  Since the encoding consists of labels
+         prefixed by a length bytes and there is a trailing NULL
+         byte, only 253 characters can appear in the textual dotted
+         notation.
+
+         The description clause of schema nodes using the domain-name
+         type MUST describe when and how these names are resolved to
+         IP addresses.  Note that the resolution of a domain-name value
+         may require to query multiple DNS records (e.g., A for IPv4
+         and AAAA for IPv6).  The order of the resolution process and
+         which DNS record takes precedence can either be defined
+         explicitly or may depend on the configuration of the
+         resolver.
+
+         Domain-name values use the US-ASCII encoding.  Their canonical
+         format uses lowercase US-ASCII characters.  Internationalized
+         domain names MUST be A-labels as per RFC 5890.";
+       reference
+        "RFC  952: DoD Internet Host Table Specification
+         RFC 1034: Domain Names - Concepts and Facilities
+         RFC 1123: Requirements for Internet Hosts -- Application
+                   and Support
+         RFC 2782: A DNS RR for specifying the location of services
+                   (DNS SRV)
+         RFC 5890: Internationalized Domain Names in Applications
+                   (IDNA): Definitions and Document Framework";
+     }
+
+     typedef host {
+       type union {
+         type inet:ip-address;
+         type inet:domain-name;
+       }
+       description
+        "The host type represents either an IP address or a DNS
+         domain name.";
+     }
+
+     typedef uri {
+       type string;
+       description
+        "The uri type represents a Uniform Resource Identifier
+         (URI) as defined by STD 66.
+
+         Objects using the uri type MUST be in US-ASCII encoding,
+         and MUST be normalized as described by RFC 3986 Sections
+         6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+         percent-encoding is removed, and all case-insensitive
+         characters are set to lowercase except for hexadecimal
+         digits, which are normalized to uppercase as described in
+         Section 6.2.2.1.
+
+         The purpose of this normalization is to help provide
+         unique URIs.  Note that this normalization is not
+         sufficient to provide uniqueness.  Two URIs that are
+         textually distinct after this normalization may still be
+         equivalent.
+
+         Objects using the uri type may restrict the schemes that
+         they permit.  For example, 'data:' and 'urn:' schemes
+         might not be appropriate.
+
+         A zero-length URI is not a valid URI.  This can be used to
+         express 'URI absent' where required.
+
+         In the value set and its semantics, this type is equivalent
+         to the Uri SMIv2 textual convention defined in RFC 5017.";
+       reference
+        "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+         RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                   Group: Uniform Resource Identifiers (URIs), URLs,
+                   and Uniform Resource Names (URNs): Clarifications
+                   and Recommendations
+         RFC 5017: MIB Textual Conventions for Uniform Resource
+                   Identifiers (URIs)";
+     }
+
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-l3-unicast-topology@2018-02-26.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-l3-unicast-topology@2018-02-26.yang
new file mode 100644
index 0000000000000000000000000000000000000000..39fcebd767bf7ea687de523b0dd0ba731d3c80e7
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-l3-unicast-topology@2018-02-26.yang
@@ -0,0 +1,359 @@
+module ietf-l3-unicast-topology {
+  yang-version 1.1;
+  namespace
+    "urn:ietf:params:xml:ns:yang:ietf-l3-unicast-topology";
+  prefix "l3t";
+  import ietf-network {
+    prefix "nw";
+  }
+  import ietf-network-topology {
+    prefix "nt";
+  }
+  import ietf-inet-types {
+    prefix "inet";
+  }
+  import ietf-routing-types {
+    prefix "rt-types";
+  }
+  organization
+    "IETF I2RS (Interface to the Routing System) Working Group";
+  contact
+    "WG Web:    <https://datatracker.ietf.org/wg/i2rs/>
+     WG List:   <mailto:i2rs@ietf.org>
+     Editor:    Alexander Clemm
+                <mailto:ludwig@clemm.org>
+     Editor:    Jan Medved
+                <mailto:jmedved@cisco.com>
+     Editor:    Robert Varga
+                <mailto:robert.varga@pantheon.tech>
+     Editor:    Xufeng Liu
+                <mailto:xufeng.liu.ietf@gmail.com>
+     Editor:    Nitin Bahadur
+                <mailto:nitin_bahadur@yahoo.com>
+     Editor:    Hariharan Ananthakrishnan
+                <mailto:hari@packetdesign.com>";
+  description
+    "This module defines a model for Layer 3 Unicast
+     topologies.
+
+     Copyright (c) 2018 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of
+     RFC 8346; see the RFC itself for full legal notices.";
+  revision "2018-02-26" {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8346: A YANG Data Model for Layer 3 Topologies";
+  }
+
+  identity flag-identity {
+    description "Base type for flags";
+  }
+
+  typedef l3-event-type {
+    type enumeration {
+      enum "add" {
+        description
+          "A Layer 3 node, link, prefix, or termination point has
+          been added";
+      }
+      enum "remove" {
+        description
+          "A Layer 3 node, link, prefix, or termination point has
+          been removed";
+      }
+      enum "update" {
+        description
+          "A Layer 3 node, link, prefix, or termination point has
+          been updated";
+      }
+    }
+    description "Layer 3 event type for notifications";
+  }
+
+  typedef prefix-flag-type {
+    type identityref {
+      base "flag-identity";
+    }
+    description "Prefix flag attributes";
+  }
+
+  typedef node-flag-type {
+    type identityref {
+      base "flag-identity";
+    }
+    description "Node flag attributes";
+  }
+
+  typedef link-flag-type {
+    type identityref {
+      base "flag-identity";
+    }
+    description "Link flag attributes";
+  }
+
+  typedef l3-flag-type {
+    type identityref {
+      base "flag-identity";
+    }
+    description "L3 flag attributes";
+  }
+
+  grouping l3-prefix-attributes {
+    description
+      "L3 prefix attributes";
+    leaf prefix {
+      type inet:ip-prefix;
+      description
+        "IP prefix value";
+    }
+    leaf metric {
+      type uint32;
+      description
+        "Prefix metric";
+    }
+    leaf-list flag {
+      type prefix-flag-type;
+      description
+        "Prefix flags";
+    }
+  }
+  grouping l3-unicast-topology-type {
+    description "Identifies the topology type to be L3 Unicast.";
+    container l3-unicast-topology {
+      presence "indicates L3 Unicast topology";
+      description
+        "The presence of the container node indicates L3 Unicast
+        topology";
+    }
+  }
+  grouping l3-topology-attributes {
+    description "Topology scope attributes";
+    container l3-topology-attributes {
+      description "Contains topology attributes";
+      leaf name {
+        type string;
+        description
+          "Name of the topology";
+      }
+      leaf-list flag {
+        type l3-flag-type;
+        description
+          "Topology flags";
+      }
+    }
+  }
+  grouping l3-node-attributes {
+    description "L3 node scope attributes";
+    container l3-node-attributes {
+      description
+        "Contains node attributes";
+      leaf name {
+        type inet:domain-name;
+        description
+          "Node name";
+      }
+      leaf-list flag {
+        type node-flag-type;
+        description
+          "Node flags";
+      }
+      leaf-list router-id {
+        type rt-types:router-id;
+        description
+          "Router-id for the node";
+      }
+      list prefix {
+        key "prefix";
+        description
+          "A list of prefixes along with their attributes";
+        uses l3-prefix-attributes;
+      }
+    }
+  }
+  grouping l3-link-attributes {
+    description
+      "L3 link scope attributes";
+    container l3-link-attributes {
+      description
+        "Contains link attributes";
+      leaf name {
+        type string;
+        description
+          "Link Name";
+      }
+      leaf-list flag {
+        type link-flag-type;
+        description
+          "Link flags";
+      }
+      leaf metric1 {
+        type uint64;
+        description
+            "Link Metric 1";
+      }
+      leaf metric2 {
+        type uint64;
+        description
+            "Link Metric 2";
+      }
+    }
+  }
+  grouping l3-termination-point-attributes {
+    description "L3 termination point scope attributes";
+    container l3-termination-point-attributes {
+      description
+        "Contains termination point attributes";
+      choice termination-point-type {
+        description
+          "Indicates the termination point type";
+        case ip {
+          leaf-list ip-address {
+            type inet:ip-address;
+            description
+              "IPv4 or IPv6 address.";
+          }
+        }
+        case unnumbered {
+          leaf unnumbered-id {
+            type uint32;
+            description
+              "Unnumbered interface identifier.
+               The identifier will correspond to the ifIndex value
+               of the interface, i.e., the ifIndex value of the
+               ifEntry that represents the interface in
+               implementations where the Interfaces Group MIB
+               (RFC 2863) is supported.";
+            reference
+              "RFC 2863: The Interfaces Group MIB";
+          }
+        }
+        case interface-name {
+          leaf interface-name {
+            type string;
+            description
+              "Name of the interface.  The name can (but does not
+               have to) correspond to an interface reference of a
+               containing node's interface, i.e., the path name of a
+               corresponding interface data node on the containing
+               node reminiscent of data type interface-ref defined
+               in RFC 8343. It should be noted that data type
+               interface-ref of RFC 8343 cannot be used directly,
+
+               as this data type is used to reference an interface
+               in a datastore of a single node in the network, not
+               to uniquely reference interfaces across a network.";
+            reference
+              "RFC 8343: A YANG Data Model for Interface Management";
+          }
+        }
+      }
+    }
+  }
+  augment "/nw:networks/nw:network/nw:network-types" {
+    description
+      "Introduces new network type for L3 Unicast topology";
+    uses l3-unicast-topology-type;
+  }
+  augment "/nw:networks/nw:network" {
+    when "nw:network-types/l3t:l3-unicast-topology" {
+      description
+        "Augmentation parameters apply only for networks with
+        L3 Unicast topology";
+    }
+    description
+        "L3 Unicast for the network as a whole";
+    uses l3-topology-attributes;
+  }
+  augment "/nw:networks/nw:network/nw:node" {
+    when "../nw:network-types/l3t:l3-unicast-topology" {
+      description
+        "Augmentation parameters apply only for networks with
+        L3 Unicast topology";
+    }
+    description
+        "L3 Unicast node-level attributes ";
+    uses l3-node-attributes;
+  }
+  augment "/nw:networks/nw:network/nt:link" {
+    when "../nw:network-types/l3t:l3-unicast-topology" {
+      description
+        "Augmentation parameters apply only for networks with
+        L3 Unicast topology";
+    }
+    description
+      "Augments topology link attributes";
+    uses l3-link-attributes;
+  }
+  augment "/nw:networks/nw:network/nw:node/"
+         +"nt:termination-point" {
+    when "../../nw:network-types/l3t:l3-unicast-topology" {
+      description
+        "Augmentation parameters apply only for networks with
+        L3 Unicast topology";
+    }
+    description "Augments topology termination point configuration";
+    uses l3-termination-point-attributes;
+  }
+  notification l3-node-event {
+    description
+      "Notification event for L3 node";
+    leaf l3-event-type {
+      type l3-event-type;
+      description
+        "Event type";
+    }
+    uses nw:node-ref;
+    uses l3-unicast-topology-type;
+    uses l3-node-attributes;
+  }
+  notification l3-link-event {
+    description
+      "Notification event for L3 link";
+    leaf l3-event-type {
+      type l3-event-type;
+      description
+        "Event type";
+    }
+    uses nt:link-ref;
+    uses l3-unicast-topology-type;
+    uses l3-link-attributes;
+  }
+  notification l3-prefix-event {
+    description
+      "Notification event for L3 prefix";
+    leaf l3-event-type {
+      type l3-event-type;
+      description
+        "Event type";
+    }
+    uses nw:node-ref;
+    uses l3-unicast-topology-type;
+    container prefix {
+      description
+        "Contains L3 prefix attributes";
+      uses l3-prefix-attributes;
+    }
+  }
+  notification termination-point-event {
+    description
+      "Notification event for L3 termination point";
+    leaf l3-event-type {
+      type l3-event-type;
+      description
+        "Event type";
+    }
+    uses nt:tp-ref;
+    uses l3-unicast-topology-type;
+    uses l3-termination-point-attributes;
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-layer1-types@2022-10-14.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-layer1-types@2022-10-14.yang
new file mode 100644
index 0000000000000000000000000000000000000000..188336931c36000b287bad5258550e7d3fa7016b
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-layer1-types@2022-10-14.yang
@@ -0,0 +1,1414 @@
+   module ietf-layer1-types {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-layer1-types";
+     prefix "l1-types";
+
+     import ietf-routing-types {
+       prefix rt-types;
+       reference
+         "RFC 8294: Common YANG Data Types for the Routing Area";
+     }
+
+     organization
+       "IETF CCAMP Working Group";
+     contact
+       "WG Web: <https://datatracker.ietf.org/wg/ccamp/>
+        WG List: <mailto:ccamp@ietf.org>
+
+        Editor: Haomian Zheng
+                <mailto:zhenghaomian@huawei.com>
+
+        Editor: Italo Busi
+                <mailto:Italo.Busi@huawei.com>";
+
+     description
+       "This module defines Layer 1 types. The model fully conforms
+        to the Network Management Datastore Architecture (NMDA).
+
+        Copyright (c) 2022 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Revised BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.
+
+       The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+       NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+       'MAY', and 'OPTIONAL' in this document are to be interpreted as
+       described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+
+
+
+
+       they appear in all capitals, as shown here.";
+
+     revision "2022-10-14" {
+       description
+         "Initial Version";
+       reference
+         "RFC XXXX: A YANG Data Model for Layer 1 Types";
+       // RFC Editor: replace XXXX with actual RFC number, update date
+       // information and remove this note
+     }
+
+     /*
+      * Identities
+      */
+
+     identity tributary-slot-granularity {
+       description
+         "Tributary Slot Granularity (TSG)";
+       reference
+         "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity tsg-1.25G {
+       base tributary-slot-granularity;
+       description
+         "1.25G tributary slot granularity";
+     }
+
+     identity tsg-2.5G {
+       base tributary-slot-granularity;
+       description
+         "2.5G tributary slot granularity";
+     }
+
+     identity tsg-5G {
+       base tributary-slot-granularity;
+       description
+         "5G tributary slot granularity";
+     }
+
+     identity odu-type {
+       description
+         "Base identity from which specific Optical Data Unit (ODU)
+         type is derived.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+
+
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU0 {
+       base odu-type;
+       description
+         "ODU0 type (1.24Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU1 {
+       base odu-type;
+       description
+         "ODU1 type (2.49Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU2 {
+       base odu-type;
+       description
+         "ODU2 type (10.03Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU2e {
+       base odu-type;
+       description
+         "ODU2e type (10.39Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+
+
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU3 {
+       base odu-type;
+       description
+         "ODU3 type (40.31Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODU4 {
+       base odu-type;
+       description
+         "ODU4 type (104.79Gb/s).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODUflex {
+       base odu-type;
+       description
+         "ODUflex type (flexible bit rate, not resizable).
+
+          It could be used for any type of ODUflex, including
+          ODUflex(CBR), ODUflex(GFP), ODUflex(GFP,n,k), ODUflex(IMP,s),
+          ODUflex(IMP) and ODUflex(FlexE-aware).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ODUflex-resizable {
+       base odu-type;
+       description
+         "ODUflex protocol (flexible bit rate, resizable).
+
+
+
+
+          It could be used only for ODUflex(GFP,n,k).";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity protocol {
+       description
+         "Base identity from which specific protocol is derived.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity Ethernet {
+       base protocol;
+       description
+         "Ethernet protocol.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity Fibre-Channel {
+       base protocol;
+       description
+         "Fibre-Channel (FC) protocol.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity SDH {
+       base protocol;
+       description
+         "SDH protocol.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity SONET {
+       base protocol;
+       description
+         "SONET protocol.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+
+
+
+     identity client-signal {
+       description
+         "Base identity from which specific Constant Bit Rate (CBR)
+         client signal is derived";
+     }
+
+     identity coding-func {
+       description
+         "Base identity from which specific coding function
+          is derived.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ETH-1Gb {
+       base client-signal;
+       description
+         "Client signal type of 1GbE";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ETH-10Gb-LAN {
+       base client-signal;
+       description
+         "Client signal type of ETH-10Gb-LAN (10.3 Gb/s)";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          IEEE 802.3-2018, Clause 49: IEEE Standard for Ethernet";
+     }
+
+     identity ETH-10Gb-WAN {
+       base client-signal;
+       description
+         "Client signal type of ETH-10Gb-WAN (9.95 Gb/s)";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+
+
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          IEEE 802.3-2018, Clause 50: IEEE Standard for Ethernet";
+     }
+
+     identity ETH-40Gb {
+       base client-signal;
+       description
+         "Client signal type of 40GbE";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ETH-100Gb {
+       base client-signal;
+       description
+         "Client signal type of 100GbE";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity STM-1 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of STM-1;
+          STM-1 G.707 (N=1) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity STM-4 {
+       base client-signal;
+
+
+
+
+       base coding-func;
+       description
+         "Client signal type of STM-4;
+          STM-4 G.707 (N=4) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity STM-16 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of STM-16;
+          STM-16 G.707 (N=16) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity STM-64 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of STM-64;
+          STM-64 G.707 (N=64) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity STM-256 {
+       base client-signal;
+
+
+
+
+       base coding-func;
+       description
+         "Client signal type of STM-256;
+          STM-256 G.707 (N=256) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity OC-3 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of OC3;
+          OC-3 GR-253-CORE (N=3) coding function.";
+       reference
+         "ANSI T1.105-1995: Synchronous Optical Network (SONET)
+          Basic Description including Multiplex Structure, Rates,
+          and Formats
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity OC-12 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of OC12;
+          OC-12 GR-253-CORE (N=12) coding function.";
+       reference
+         "ANSI T1.105-1995: Synchronous Optical Network (SONET)
+          Basic Description including Multiplex Structure, Rates,
+          and Formats
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity OC-48 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of OC48;
+          OC-48 GR-253-CORE (N=48) coding function.";
+
+
+
+
+       reference
+         "ANSI T1.105-1995: Synchronous Optical Network (SONET)
+          Basic Description including Multiplex Structure, Rates,
+          and Formats
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity OC-192 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of OC192;
+          OC-192 GR-253-CORE (N=192) coding function.";
+       reference
+         "ANSI T1.105-1995: Synchronous Optical Network (SONET)
+          Basic Description including Multiplex Structure, Rates,
+          and Formats
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity OC-768 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of OC768;
+          OC-768 GR-253-CORE (N=768) coding function.";
+       reference
+         "ANSI T1.105-1995: Synchronous Optical Network (SONET)
+          Basic Description including Multiplex Structure, Rates,
+          and Formats
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-100 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-100;
+          FC-100 FC-FS-2 (1.0625 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+
+
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-200 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-200;
+          FC-200 FC-FS-2 (2.125 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-400 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-400;
+          FC-400 FC-FS-2 (4.250 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-800 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-800;
+          FC-800 FC-FS-2 (8.500 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+
+
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-1200 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-1200;
+          FC-1200 FC-10GFC (10.51875 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-1600 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-1600;
+          FC-1600 FC-FS-3 (14.025 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FC-3200 {
+       base client-signal;
+       base coding-func;
+       description
+         "Client signal type of Fibre Channel FC-3200;
+          FC-3200 FC-FS-4 (28.05 Gb/s) coding function.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)
+
+
+
+
+          MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FICON-4G {
+       base client-signal;
+       description
+         "Client signal type of Fibre Connection 4G";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity FICON-8G {
+       base client-signal;
+       description
+         "Client signal type of Fibre Connection 8G";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks
+
+          ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+          Transport Network (OTN)";
+     }
+
+     identity ETH-1000X {
+       base coding-func;
+       description
+         "1000BASE-X PCS clause 36 coding function.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ETH-10GW {
+       base coding-func;
+       description
+         "10GBASE-W (WAN PHY) PCS clause 49 and WIS clause 50
+          coding function.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ETH-10GR {
+       base coding-func;
+       description
+         "10GBASE-R (LAN PHY) PCS clause 49 coding function.";
+
+
+
+
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ETH-40GR {
+       base coding-func;
+       description
+         "40GBASE-R PCS clause 82 coding function.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ETH-100GR {
+       base coding-func;
+       description
+         "100GBASE-R PCS clause 82 coding function.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity optical-interface-func {
+       description
+         "Base identity from which optical-interface-function
+          is derived.";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity SX-PMD-1000 {
+       base optical-interface-func;
+       description
+         "SX-PMD-clause-38 Optical Interface function for
+         1000BASE-X PCS-36";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LX-PMD-1000 {
+       base optical-interface-func;
+       description
+         "LX-PMD-clause-38 Optical Interface function for
+          1000BASE-X PCS-36";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LX10-PMD-1000 {
+       base optical-interface-func;
+
+
+
+
+       description
+         "LX10-PMD-clause-59 Optical Interface function for
+          1000BASE-X PCS-36";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity BX10-PMD-1000 {
+       base optical-interface-func;
+       description
+         "BX10-PMD-clause-59 Optical Interface function for
+          1000BASE-X PCS-36";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LW-PMD-10G {
+       base optical-interface-func;
+       description
+         "LW-PMD-clause-52 Optical Interface function for
+          10GBASE-W PCS-49-WIS-50";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity EW-PMD-10G {
+       base optical-interface-func;
+       description
+         "EW-PMD-clause-52 Optical Interface function for
+          10GBASE-W PCS-49-WIS-50";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LR-PMD-10G {
+       base optical-interface-func;
+       description
+         "LR-PMD-clause-52 Optical Interface function for
+          10GBASE-R PCS-49";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ER-PMD-10G {
+       base optical-interface-func;
+       description
+         "ER-PMD-clause-52 Optical Interface function for
+          10GBASE-R PCS-49";
+
+
+
+
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LR4-PMD-40G {
+       base optical-interface-func;
+       description
+         "LR4-PMD-clause-87 Optical Interface function for
+          40GBASE-R PCS-82";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ER4-PMD-40G {
+       base optical-interface-func;
+       description
+         "ER4-PMD-clause-87 Optical Interface function for
+          40GBASE-R PCS-82";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity FR-PMD-40G {
+       base optical-interface-func;
+       description
+         "FR-PMD-clause-89 Optical Interface function for
+          40GBASE-R PCS-82";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity LR4-PMD-100G {
+       base optical-interface-func;
+       description
+         "LR4-PMD-clause-88 Optical Interface function for
+          100GBASE-R PCS-82";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+     identity ER4-PMD-100G {
+       base optical-interface-func;
+       description
+         "ER4-PMD-clause-88 Optical Interface function for
+          100GBASE-R PCS-82";
+       reference
+         "MEF63: Subscriber Layer 1 Service Attributes";
+     }
+
+
+
+
+     /*
+      * Typedefs
+      */
+
+     typedef otn-tpn {
+       type uint16 {
+         range "1..4095";
+       }
+       description
+         "Tributary Port Number (TPN) for OTN. ";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks.";
+     }
+
+     typedef otn-ts {
+       type uint16 {
+         range "1..4095";
+       }
+       description
+         "Tributary Slot (TS) for OTN.";
+       reference
+         "RFC7139: GMPLS Signaling Extensions for Control of Evolving
+          G.709 Optical Transport Networks.";
+     }
+
+     typedef otn-label-range-type {
+       type enumeration {
+         enum trib-slot {
+           description
+             "Defines a range of OTN tributary slots (TS).";
+         }
+         enum trib-port {
+           description
+             "Defines a range of OTN tributary ports (TPN).";
+         }
+       }
+       description
+         "Defines the type of OTN label range: TS or TPN. ";
+     }
+
+     typedef gfp-k {
+       type enumeration {
+         enum 2 {
+           description
+             "The ODU2.ts rate (1,249,177.230 kbit/s) is used
+              to compute the rate of an ODUflex(GFP,n,2). ";
+         }
+
+
+
+
+         enum 3 {
+           description
+             "The ODU3.ts rate (1,254,470.354 kbit/s) is used
+              to compute the rate of an ODUflex(GFP,n,3). ";
+         }
+         enum 4 {
+           description
+             "The ODU4.ts rate (1,301,467.133 kbit/s) is used
+              to compute the rate of an ODUflex(GFP,n,4). ";
+         }
+       }
+       description
+         "The ODUk.ts used to compute the rate of an ODUflex(GFP,n,k)";
+       reference
+         "ITU-T G.709 v6.0 (06/2020), Table 7-8 and L.7: Interfaces for
+          the Optical Transport Network (OTN)";
+     }
+
+     typedef flexe-client-rate {
+       type union {
+         type uint16;
+         type enumeration {
+           enum "10G" {
+             description
+               "Represents a 10G FlexE Client signal (s=2)";
+           }
+           enum "40G" {
+             description
+               "Represents a 40G FlexE Client signal (s=8)";
+           }
+         }
+       }
+       description
+         "The FlexE Client signal rate (s x 5,156,250.000 kbit/s)
+          used to compute the rate of an ODUflex(IMP, s).
+          Valid values for s are s=2 (10G), s=4 (40G) and
+          s=5 x n (n x 25G).
+          In the first two cases an enumeration value
+          (either 10G or 40G) is used, while in the latter case
+          the value of n is used";
+       reference
+         "ITU-T G.709 v6.0 (06/2020), Table 7-2: Interfaces for the
+          Optical Transport Network (OTN)";
+     }
+
+     typedef odtu-flex-type {
+       type enumeration {
+         enum "2" {
+
+
+
+
+           description
+             "The ODTU2.ts ODTU type.";
+         }
+         enum "3" {
+           description
+             "The ODTU3.ts ODTU type.";
+         }
+         enum "4" {
+           description
+             "The ODTU4.ts ODTU type.";
+         }
+         enum "Cn" {
+           description
+             "The ODTUCn.ts ODTU type.";
+         }
+       }
+       description
+         "The type of Optical Data Tributary Unit (ODTU),
+         whose nominal bitrate is used to compute the number of
+         Tributary Slots (TS) required by an ODUflex LSP, according to
+         the (19-1a) and (20-1a) formulas defined in G.709.";
+       reference
+         "ITU-T G.709 v6.0 (06/2020), Table 7-7, clause 19.6 and
+         clause 20.5: Interfaces for the Optical Transport
+         Network (OTN)";
+     }
+
+     typedef bandwidth-scientific-notation {
+       type string {
+         pattern
+           '0(\.0?)?([eE](\+)?0?)?|'
+         + '[1-9](\.[0-9]{0,6})?[eE](\+)?(9[0-6]|[1-8][0-9]|0?[0-9])?';
+       }
+       units "bps";
+       description
+         "Bandwidth values, expressed using the scientific notation
+         in bits per second.
+
+         The encoding format is the external decimal-significant
+         character sequences specified in IEEE 754 and ISO/IEC C99
+         for 32-bit decimal floating-point numbers:
+         (-1)**(S) * 10**(Exponent) * (Significant),
+         where Significant uses 7 digits.
+
+         An implementation for this representation MAY use decimal32
+         or binary32. The range of the Exponent is from -95 to +96
+         for decimal32, and from -38 to +38 for binary32.
+         As a bandwidth value, the format is restricted to be
+
+
+
+
+         normalized, non-negative, and non-fraction:
+         n.dddddde{+}dd, N.DDDDDDE{+}DD, 0e0 or 0E0,
+         where 'd' and 'D' are decimal digits; 'n' and 'N' are
+         non-zero decimal digits; 'e' and 'E' indicate a power of ten.
+         Some examples are 0e0, 1e10, and 9.953e9.";
+       reference
+         "IEEE Std 754-2008: IEEE Standard for Floating-Point
+         Arithmetic.
+         ISO/IEC C99: Information technology - Programming
+         Languages - C.";
+     }
+
+     /*
+      * Groupings
+      */
+
+     grouping otn-link-bandwidth {
+       description
+         "Bandwidth attributes for OTN links";
+       container otn {
+         description
+           "Bandwidth attributes for OTN links";
+         list odulist {
+           key "odu-type";
+           description
+             "OTN bandwidth definition";
+           leaf odu-type {
+             type identityref {
+               base odu-type;
+             }
+             description "ODU type";
+           }
+           leaf number {
+             type uint16;
+             description "Number of ODUs";
+           }
+           leaf ts-number {
+             when 'derived-from-or-self(../odu-type,"ODUflex") or
+                   derived-from-or-self(../odu-type,
+                   "ODUflex-resizable")' {
+               description
+                 "Applicable when odu-type is ODUflex or
+                 ODUflex-resizable";
+             }
+             type uint16 {
+               range "1..4095";
+             }
+             description
+
+
+
+
+               "The number of Tributary Slots (TS) that
+               could be used by all the ODUflex LSPs.";
+           }
+         }
+       }
+     }
+
+     grouping otn-path-bandwidth {
+       description
+         "Bandwidth attributes for OTN paths.";
+       container otn {
+         description
+           "Bandwidth attributes for OTN paths.";
+         leaf odu-type {
+           type identityref {
+             base odu-type;
+           }
+           description "ODU type";
+         }
+         choice oduflex-type {
+           when 'derived-from-or-self(./odu-type,"ODUflex") or
+                 derived-from-or-self(./odu-type,
+                 "ODUflex-resizable")' {
+             description
+               "Applicable when odu-type is ODUflex or
+                ODUflex-resizable";
+           }
+           description
+             "Types of ODUflex used to compute the ODUflex
+              nominal bit rate.";
+           reference
+             "ITU-T G.709 v6.0 (06/2020), Table 7-2: Interfaces for the
+              Optical Transport Network (OTN)";
+           case generic {
+             leaf nominal-bit-rate {
+               type union {
+                 type l1-types:bandwidth-scientific-notation;
+                 type rt-types:bandwidth-ieee-float32;
+               }
+               mandatory true;
+               description
+                 "Nominal ODUflex bit rate.";
+             }
+           }
+           case cbr {
+             leaf client-type {
+               type identityref {
+                 base client-signal;
+
+
+
+
+               }
+               mandatory true;
+               description
+                 "The type of Constant Bit Rate (CBR) client signal
+                 of an ODUflex(CBR).";
+             }
+           }
+           case gfp-n-k {
+             leaf gfp-n {
+               type uint8 {
+                 range "1..80";
+               }
+               mandatory true;
+               description
+                 "The value of n for an ODUflex(GFP,n,k).";
+               reference
+                 "ITU-T G.709 v6.0 (06/2020), Tables 7-8 and L.7:
+                  Interfaces for the Optical Transport Network (OTN)";
+             }
+             leaf gfp-k {
+               type gfp-k;
+               description
+                 "The value of k for an ODUflex(GFP,n,k).
+
+                  If omitted, it is calculated from the value of gfp-n
+                  as described in Table 7-8 of G.709";
+               reference
+                 "ITU-T G.709 v6.0 (06/2020), Tables 7-8 and L.7:
+                  Interfaces for the Optical Transport Network (OTN)";
+             }
+           }
+           case flexe-client {
+             leaf flexe-client {
+               type flexe-client-rate;
+               mandatory true;
+               description
+                 "The rate of the FlexE-client for an ODUflex(IMP,s).";
+             }
+           }
+           case flexe-aware {
+             leaf flexe-aware-n {
+               type uint16;
+               mandatory true;
+               description
+                 "The rate of FlexE-aware client signal
+                  for ODUflex(FlexE-aware)";
+             }
+           }
+
+
+
+
+           case packet {
+             leaf opuflex-payload-rate {
+               type union {
+                 type l1-types:bandwidth-scientific-notation;
+                 type rt-types:bandwidth-ieee-float32;
+               }
+               mandatory true;
+               description
+                 "Either the GFP-F encapsulated packet client nominal
+                  bit rate for an ODUflex(GFP) or the 64b/66b encoded
+                  packet client nominal bit rate for an ODUflex(IMP).";
+             }
+           }
+         }
+       }
+     }
+
+     grouping otn-max-path-bandwidth {
+       description
+         "Maximum bandwidth attributes for OTN paths.";
+       container otn {
+         description
+           "Maximum bandwidth attributes for OTN paths.";
+         leaf odu-type {
+           type identityref {
+             base odu-type;
+           }
+           description "ODU type";
+         }
+         leaf max-ts-number {
+           when 'derived-from-or-self(../odu-type,"ODUflex") or
+                 derived-from-or-self(../odu-type,
+                 "ODUflex-resizable")' {
+             description
+               "Applicable when odu-type is ODUflex or
+                ODUflex-resizable";
+           }
+           type uint16 {
+             range "1..4095";
+           }
+           description
+             "The maximum number of Tributary Slots (TS) that could be
+             used  by an ODUflex LSP.";
+         }
+       }
+     }
+
+     grouping otn-label-range-info {
+
+
+
+
+       description
+         "Label range information for OTN.
+
+          This grouping SHOULD be used together with the
+          otn-label-start-end and otn-label-step groupings to provide
+          OTN technology-specific label information to the models which
+          use the label-restriction-info grouping defined in the module
+          ietf-te-types.";
+       container otn-label-range {
+         description
+           "Label range information for OTN.";
+         leaf range-type {
+           type otn-label-range-type;
+           description "The type of range (e.g., TPN or TS)
+             to which the label range applies";
+         }
+         leaf tsg {
+           type identityref {
+             base tributary-slot-granularity;
+           }
+           description
+             "Tributary slot granularity (TSG) to which the label range
+             applies.
+
+             This leaf MUST be present when the range-type is TS.
+
+             This leaf MAY be omitted when mapping an ODUk over an OTUk
+             Link. In this case the range-type is tpn, with only one
+             entry (ODUk), and the tpn range has only one value (1).";
+           reference
+             "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+             Transport Network (OTN)";
+         }
+         leaf-list odu-type-list {
+           type identityref {
+             base odu-type;
+           }
+           description
+             "List of ODU types to which the label range applies.
+
+             An Empty odu-type-list means that the label range
+             applies to all the supported ODU types.";
+         }
+         leaf priority {
+           type uint8 {
+             range 0..7;
+           }
+           description
+
+
+
+
+             "Priority in Interface Switching Capability
+             Descriptor (ISCD).";
+           reference
+             "RFC4203: OSPF Extensions in Support of Generalized
+             Multi-Protocol Label Switching (GMPLS)";
+         }
+       }
+     }
+
+     grouping otn-label-start-end {
+       description
+         "The OTN label-start or label-end used to specify an OTN label
+          range.
+
+          This grouping is dependent on the range-type defined in the
+          otn-label-range-info grouping.
+
+          This grouping SHOULD be used together with the
+          otn-label-range-info and otn-label-step groupings to provide
+          OTN technology-specific label information to the models which
+          use the label-restriction-info grouping defined in the module
+          ietf-te-types.";
+       container otn {
+         description
+           "Label start or label end for OTN.";
+         choice range-type {
+           description
+             "OTN label range type, either TPN range or TS range";
+           case trib-port {
+             leaf tpn {
+               when "../../../../otn-label-range/range-type =
+                     'trib-port'" {
+                 description
+                   "Valid only when range-type represented by
+                   trib-port";
+               }
+               type otn-tpn;
+               description
+                 "Tributary Port Number (TPN).";
+               reference
+                 "RFC7139: GMPLS Signaling Extensions for Control of
+                 Evolving G.709 Optical Transport Networks.";
+             }
+           }
+           case trib-slot {
+             leaf ts {
+               when "../../../../otn-label-range/range-type =
+                     'trib-slot'" {
+
+
+
+
+                 description
+                   "Valid only when range-type represented by
+                   trib-slot";
+               }
+               type otn-ts;
+               description
+                 "Tributary Slot (TS) number.";
+               reference
+                 "RFC7139: GMPLS Signaling Extensions for Control of
+                 Evolving G.709 Optical Transport Networks";
+             }
+           }
+         }
+       }
+     }
+
+     grouping otn-label-hop {
+       description "OTN Label";
+       reference
+         "RFC7139, section 6: GMPLS Signaling Extensions for Control of
+          Evolving G.709 Optical Transport Networks";
+       container otn {
+         description
+           "Label hop for OTN.";
+         leaf tpn {
+           type otn-tpn;
+           description
+             "Tributary Port Number (TPN).";
+           reference
+             "RFC7139: GMPLS Signaling Extensions for Control of
+             Evolving G.709 Optical Transport Networks.";
+         }
+         leaf tsg {
+           type identityref {
+             base tributary-slot-granularity;
+           }
+           description "Tributary Slot Granularity (TSG).";
+           reference
+             "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+             Transport Network (OTN)";
+         }
+         leaf ts-list {
+           type string {
+               pattern "([1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?"
+                     + "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)";
+             }
+           description
+             "A list of available Tributary Slots (TS) ranging
+
+
+
+
+             between 1 and 4095. If multiple values or
+             ranges are given, they all MUST be disjoint
+             and MUST be in ascending order.
+             For example 1-20,25,50-1000.";
+           reference
+             "RFC 7139: GMPLS Signaling Extensions for Control
+             of Evolving G.709 Optical Transport Networks";
+         }
+       }
+     }
+
+     grouping otn-label-step {
+       description
+         "Label step for OTN.
+
+          This grouping is dependent on the range-type defined in the
+          otn-label-range-info grouping.
+
+          This grouping SHOULD be used together with the
+          otn-label-range-info and otn-label-start-end groupings to
+          provide OTN technology-specific label information to the
+          models which use the label-restriction-info grouping defined
+          in the module ietf-te-types.";
+       container otn {
+         description
+           "Label step for OTN";
+         choice range-type {
+           description
+             "OTN label range type, either TPN range or TS range";
+           case trib-port {
+             leaf tpn {
+               when "../../../otn-label-range/range-type =
+                     'trib-port'" {
+                 description
+                   "Valid only when range-type represented by
+                   trib-port";
+               }
+               type otn-tpn;
+               description
+                 "Label step which represents possible increments for
+                 Tributary Port Number (TPN).";
+               reference
+                 "RFC7139: GMPLS Signaling Extensions for Control of
+                 Evolving G.709 Optical Transport Networks.";
+             }
+           }
+           case trib-slot {
+             leaf ts {
+
+
+
+
+               when "../../../otn-label-range/range-type =
+                     'trib-slot'" {
+                 description
+                   "Valid only when range-type represented by
+                   trib-slot";
+               }
+               type otn-ts;
+               description
+                 "Label step which represents possible increments for
+                 Tributary Slot (TS) number.";
+               reference
+                 "RFC7139: GMPLS Signaling Extensions for Control of
+                 Evolving G.709 Optical Transport Networks.";
+             }
+           }
+         }
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-netconf-acm@2018-02-14.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-netconf-acm@2018-02-14.yang
new file mode 100644
index 0000000000000000000000000000000000000000..bf4855faf0508a152471f6c6c8f756581b8ebb96
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-netconf-acm@2018-02-14.yang
@@ -0,0 +1,464 @@
+module ietf-netconf-acm {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+
+  prefix nacm;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     Author:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Author:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "Network Configuration Access Control Model.
+
+     Copyright (c) 2012 - 2018 IETF Trust and the persons
+     identified as authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8341; see
+     the RFC itself for full legal notices.";
+
+  revision "2018-02-14" {
+    description
+      "Added support for YANG 1.1 actions and notifications tied to
+       data nodes.  Clarified how NACM extensions can be used by
+       other data models.";
+    reference
+      "RFC 8341: Network Configuration Access Control Model";
+  }
+
+  revision "2012-02-22" {
+    description
+      "Initial version.";
+    reference
+      "RFC 6536: Network Configuration Protocol (NETCONF)
+                 Access Control Model";
+  }
+
+  /*
+   * Extension statements
+   */
+
+  extension default-deny-write {
+    description
+      "Used to indicate that the data model node
+       represents a sensitive security system parameter.
+
+       If present, the NETCONF server will only allow the designated
+       'recovery session' to have write access to the node.  An
+       explicit access control rule is required for all other users.
+
+       If the NACM module is used, then it must be enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), or this extension
+       is ignored.
+
+       The 'default-deny-write' extension MAY appear within a data
+       definition statement.  It is ignored otherwise.";
+  }
+
+  extension default-deny-all {
+    description
+      "Used to indicate that the data model node
+       controls a very sensitive security system parameter.
+
+       If present, the NETCONF server will only allow the designated
+       'recovery session' to have read, write, or execute access to
+       the node.  An explicit access control rule is required for all
+       other users.
+
+       If the NACM module is used, then it must be enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), or this extension
+       is ignored.
+
+       The 'default-deny-all' extension MAY appear within a data
+       definition statement, 'rpc' statement, or 'notification'
+       statement.  It is ignored otherwise.";
+  }
+
+  /*
+   * Derived types
+   */
+
+  typedef user-name-type {
+    type string {
+      length "1..max";
+    }
+    description
+      "General-purpose username string.";
+  }
+
+  typedef matchall-string-type {
+    type string {
+      pattern '\*';
+    }
+    description
+      "The string containing a single asterisk '*' is used
+       to conceptually represent all possible values
+       for the particular leaf using this data type.";
+  }
+
+  typedef access-operations-type {
+    type bits {
+      bit create {
+        description
+          "Any protocol operation that creates a
+           new data node.";
+      }
+      bit read {
+        description
+          "Any protocol operation or notification that
+           returns the value of a data node.";
+      }
+      bit update {
+        description
+          "Any protocol operation that alters an existing
+           data node.";
+      }
+      bit delete {
+        description
+          "Any protocol operation that removes a data node.";
+      }
+      bit exec {
+        description
+          "Execution access to the specified protocol operation.";
+      }
+    }
+    description
+      "Access operation.";
+  }
+
+  typedef group-name-type {
+    type string {
+      length "1..max";
+      pattern '[^\*].*';
+    }
+    description
+      "Name of administrative group to which
+       users can be assigned.";
+  }
+
+  typedef action-type {
+    type enumeration {
+      enum permit {
+        description
+          "Requested action is permitted.";
+      }
+      enum deny {
+        description
+          "Requested action is denied.";
+      }
+    }
+    description
+      "Action taken by the server when a particular
+       rule matches.";
+  }
+
+  typedef node-instance-identifier {
+    type yang:xpath1.0;
+    description
+      "Path expression used to represent a special
+       data node, action, or notification instance-identifier
+       string.
+
+       A node-instance-identifier value is an
+       unrestricted YANG instance-identifier expression.
+       All the same rules as an instance-identifier apply,
+       except that predicates for keys are optional.  If a key
+       predicate is missing, then the node-instance-identifier
+       represents all possible server instances for that key.
+
+       This XML Path Language (XPath) expression is evaluated in the
+       following context:
+
+          o  The set of namespace declarations are those in scope on
+             the leaf element where this type is used.
+
+          o  The set of variable bindings contains one variable,
+             'USER', which contains the name of the user of the
+             current session.
+
+          o  The function library is the core function library, but
+             note that due to the syntax restrictions of an
+             instance-identifier, no functions are allowed.
+
+          o  The context node is the root node in the data tree.
+
+       The accessible tree includes actions and notifications tied
+       to data nodes.";
+  }
+
+  /*
+   * Data definition statements
+   */
+
+  container nacm {
+    nacm:default-deny-all;
+
+    description
+      "Parameters for NETCONF access control model.";
+
+    leaf enable-nacm {
+      type boolean;
+      default "true";
+      description
+        "Enables or disables all NETCONF access control
+         enforcement.  If 'true', then enforcement
+         is enabled.  If 'false', then enforcement
+         is disabled.";
+    }
+
+    leaf read-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether read access is granted if
+         no appropriate rule is found for a
+         particular read request.";
+    }
+
+    leaf write-default {
+      type action-type;
+      default "deny";
+      description
+        "Controls whether create, update, or delete access
+         is granted if no appropriate rule is found for a
+         particular write request.";
+    }
+
+    leaf exec-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether exec access is granted if no appropriate
+         rule is found for a particular protocol operation request.";
+    }
+
+    leaf enable-external-groups {
+      type boolean;
+      default "true";
+      description
+        "Controls whether the server uses the groups reported by the
+         NETCONF transport layer when it assigns the user to a set of
+         NACM groups.  If this leaf has the value 'false', any group
+         names reported by the transport layer are ignored by the
+         server.";
+    }
+
+    leaf denied-operations {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request was denied.";
+    }
+
+    leaf denied-data-writes {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request to alter
+         a configuration datastore was denied.";
+    }
+
+    leaf denied-notifications {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that
+         a notification was dropped for a subscription because
+         access to the event type was denied.";
+    }
+
+    container groups {
+      description
+        "NETCONF access control groups.";
+
+      list group {
+        key name;
+
+        description
+          "One NACM group entry.  This list will only contain
+           configured entries, not any entries learned from
+           any transport protocols.";
+
+        leaf name {
+          type group-name-type;
+          description
+            "Group name associated with this entry.";
+        }
+
+        leaf-list user-name {
+          type user-name-type;
+          description
+            "Each entry identifies the username of
+             a member of the group associated with
+             this entry.";
+        }
+      }
+    }
+
+    list rule-list {
+      key name;
+      ordered-by user;
+      description
+        "An ordered collection of access control rules.";
+
+      leaf name {
+        type string {
+          length "1..max";
+        }
+        description
+          "Arbitrary name assigned to the rule-list.";
+      }
+      leaf-list group {
+        type union {
+          type matchall-string-type;
+          type group-name-type;
+        }
+        description
+          "List of administrative groups that will be
+           assigned the associated access rights
+           defined by the 'rule' list.
+
+           The string '*' indicates that all groups apply to the
+           entry.";
+      }
+
+      list rule {
+        key name;
+        ordered-by user;
+        description
+          "One access control rule.
+
+           Rules are processed in user-defined order until a match is
+           found.  A rule matches if 'module-name', 'rule-type', and
+           'access-operations' match the request.  If a rule
+           matches, the 'action' leaf determines whether or not
+           access is granted.";
+
+        leaf name {
+          type string {
+            length "1..max";
+          }
+          description
+            "Arbitrary name assigned to the rule.";
+        }
+
+        leaf module-name {
+          type union {
+            type matchall-string-type;
+            type string;
+          }
+          default "*";
+          description
+            "Name of the module associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             object being accessed is defined in the module with the
+             specified module name.";
+        }
+        choice rule-type {
+          description
+            "This choice matches if all leafs present in the rule
+             match the request.  If no leafs are present, the
+             choice matches all requests.";
+          case protocol-operation {
+            leaf rpc-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if
+                 its value equals the requested protocol operation
+                 name.";
+            }
+          }
+          case notification {
+            leaf notification-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if its
+                 value equals the requested notification name.";
+            }
+          }
+
+          case data-node {
+            leaf path {
+              type node-instance-identifier;
+              mandatory true;
+              description
+                "Data node instance-identifier associated with the
+                 data node, action, or notification controlled by
+                 this rule.
+
+                 Configuration data or state data
+                 instance-identifiers start with a top-level
+                 data node.  A complete instance-identifier is
+                 required for this type of path value.
+
+                 The special value '/' refers to all possible
+                 datastore contents.";
+            }
+          }
+        }
+
+        leaf access-operations {
+          type union {
+            type matchall-string-type;
+            type access-operations-type;
+          }
+          default "*";
+          description
+            "Access operations associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             bit corresponding to the requested operation is set.";
+        }
+
+        leaf action {
+          type action-type;
+          mandatory true;
+          description
+            "The access control action associated with the
+             rule.  If a rule has been determined to match a
+             particular request, then this object is used
+             to determine whether to permit or deny the
+             request.";
+        }
+
+        leaf comment {
+          type string;
+          description
+            "A textual description of the access rule.";
+        }
+      }
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network-topology@2018-02-26.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network-topology@2018-02-26.yang
new file mode 100644
index 0000000000000000000000000000000000000000..0538ac01b629e80db37bd66a3128ac5e04dfbcef
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network-topology@2018-02-26.yang
@@ -0,0 +1,294 @@
+   module ietf-network-topology {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";
+     prefix nt;
+
+     import ietf-inet-types {
+       prefix inet;
+       reference
+         "RFC 6991: Common YANG Data Types";
+     }
+     import ietf-network {
+       prefix nw;
+       reference
+         "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     organization
+       "IETF I2RS (Interface to the Routing System) Working Group";
+
+     contact
+       "WG Web:    <https://datatracker.ietf.org/wg/i2rs/>
+        WG List:   <mailto:i2rs@ietf.org>
+
+        Editor:    Alexander Clemm
+                   <mailto:ludwig@clemm.org>
+
+        Editor:    Jan Medved
+                   <mailto:jmedved@cisco.com>
+
+        Editor:    Robert Varga
+                   <mailto:robert.varga@pantheon.tech>
+
+        Editor:    Nitin Bahadur
+                   <mailto:nitin_bahadur@yahoo.com>
+
+        Editor:    Hariharan Ananthakrishnan
+                   <mailto:hari@packetdesign.com>
+
+        Editor:    Xufeng Liu
+                   <mailto:xufeng.liu.ietf@gmail.com>";
+
+     description
+       "This module defines a common base model for a network topology,
+        augmenting the base network data model with links to connect
+        nodes, as well as termination points to terminate links
+        on nodes.
+
+        Copyright (c) 2018 IETF Trust and the persons identified as
+        authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC 8345;
+        see the RFC itself for full legal notices.";
+
+     revision 2018-02-26 {
+       description
+         "Initial revision.";
+       reference
+         "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     typedef link-id {
+       type inet:uri;
+       description
+         "An identifier for a link in a topology.  The precise
+          structure of the link-id will be up to the implementation.
+          The identifier SHOULD be chosen such that the same link in a
+          real network topology will always be identified through the
+          same identifier, even if the data model is instantiated in
+          separate datastores.  An implementation MAY choose to capture
+          semantics in the identifier -- for example, to indicate the
+          type of link and/or the type of topology of which the link is
+          a part.";
+     }
+
+     typedef tp-id {
+       type inet:uri;
+       description
+         "An identifier for termination points on a node.  The precise
+          structure of the tp-id will be up to the implementation.
+          The identifier SHOULD be chosen such that the same termination
+          point in a real network topology will always be identified
+          through the same identifier, even if the data model is
+          instantiated in separate datastores.  An implementation MAY
+          choose to capture semantics in the identifier -- for example,
+          to indicate the type of termination point and/or the type of
+          node that contains the termination point.";
+     }
+
+     grouping link-ref {
+       description
+         "This grouping can be used to reference a link in a specific
+          network.  Although it is not used in this module, it is
+          defined here for the convenience of augmenting modules.";
+       leaf link-ref {
+         type leafref {
+           path "/nw:networks/nw:network[nw:network-id=current()/../"+
+             "network-ref]/nt:link/nt:link-id";
+           require-instance false;
+         }
+         description
+           "A type for an absolute reference to a link instance.
+            (This type should not be used for relative references.
+            In such a case, a relative path should be used instead.)";
+       }
+       uses nw:network-ref;
+     }
+
+     grouping tp-ref {
+       description
+         "This grouping can be used to reference a termination point
+          in a specific node.  Although it is not used in this module,
+          it is defined here for the convenience of augmenting
+          modules.";
+       leaf tp-ref {
+         type leafref {
+           path "/nw:networks/nw:network[nw:network-id=current()/../"+
+             "network-ref]/nw:node[nw:node-id=current()/../"+
+             "node-ref]/nt:termination-point/nt:tp-id";
+           require-instance false;
+         }
+         description
+           "A type for an absolute reference to a termination point.
+            (This type should not be used for relative references.
+            In such a case, a relative path should be used instead.)";
+       }
+       uses nw:node-ref;
+     }
+
+     augment "/nw:networks/nw:network" {
+       description
+         "Add links to the network data model.";
+       list link {
+         key "link-id";
+         description
+           "A network link connects a local (source) node and
+            a remote (destination) node via a set of the respective
+            node's termination points.  It is possible to have several
+            links between the same source and destination nodes.
+            Likewise, a link could potentially be re-homed between
+            termination points.  Therefore, in order to ensure that we
+            would always know to distinguish between links, every link
+            is identified by a dedicated link identifier.  Note that a
+            link models a point-to-point link, not a multipoint link.";
+         leaf link-id {
+           type link-id;
+           description
+             "The identifier of a link in the topology.
+              A link is specific to a topology to which it belongs.";
+         }
+         container source {
+           description
+             "This container holds the logical source of a particular
+              link.";
+           leaf source-node {
+             type leafref {
+               path "../../../nw:node/nw:node-id";
+               require-instance false;
+             }
+             description
+               "Source node identifier.  Must be in the same topology.";
+           }
+           leaf source-tp {
+             type leafref {
+               path "../../../nw:node[nw:node-id=current()/../"+
+                 "source-node]/termination-point/tp-id";
+               require-instance false;
+             }
+             description
+               "This termination point is located within the source node
+                and terminates the link.";
+           }
+         }
+
+         container destination {
+           description
+             "This container holds the logical destination of a
+              particular link.";
+           leaf dest-node {
+             type leafref {
+               path "../../../nw:node/nw:node-id";
+             require-instance false;
+             }
+             description
+               "Destination node identifier.  Must be in the same
+                network.";
+           }
+           leaf dest-tp {
+             type leafref {
+               path "../../../nw:node[nw:node-id=current()/../"+
+                 "dest-node]/termination-point/tp-id";
+               require-instance false;
+             }
+             description
+               "This termination point is located within the
+                destination node and terminates the link.";
+           }
+         }
+         list supporting-link {
+           key "network-ref link-ref";
+           description
+             "Identifies the link or links on which this link depends.";
+           leaf network-ref {
+             type leafref {
+               path "../../../nw:supporting-network/nw:network-ref";
+             require-instance false;
+             }
+             description
+               "This leaf identifies in which underlay topology
+                the supporting link is present.";
+           }
+
+           leaf link-ref {
+             type leafref {
+               path "/nw:networks/nw:network[nw:network-id=current()/"+
+                 "../network-ref]/link/link-id";
+               require-instance false;
+             }
+             description
+               "This leaf identifies a link that is a part
+                of this link's underlay.  Reference loops in which
+                a link identifies itself as its underlay, either
+                directly or transitively, are not allowed.";
+           }
+         }
+       }
+     }
+     augment "/nw:networks/nw:network/nw:node" {
+       description
+         "Augments termination points that terminate links.
+          Termination points can ultimately be mapped to interfaces.";
+       list termination-point {
+         key "tp-id";
+         description
+           "A termination point can terminate a link.
+            Depending on the type of topology, a termination point
+            could, for example, refer to a port or an interface.";
+         leaf tp-id {
+           type tp-id;
+           description
+             "Termination point identifier.";
+         }
+         list supporting-termination-point {
+           key "network-ref node-ref tp-ref";
+           description
+             "This list identifies any termination points on which a
+              given termination point depends or onto which it maps.
+              Those termination points will themselves be contained
+              in a supporting node.  This dependency information can be
+              inferred from the dependencies between links.  Therefore,
+              this item is not separately configurable.  Hence, no
+              corresponding constraint needs to be articulated.
+              The corresponding information is simply provided by the
+              implementing system.";
+
+           leaf network-ref {
+             type leafref {
+               path "../../../nw:supporting-node/nw:network-ref";
+             require-instance false;
+             }
+             description
+               "This leaf identifies in which topology the
+                supporting termination point is present.";
+           }
+           leaf node-ref {
+             type leafref {
+               path "../../../nw:supporting-node/nw:node-ref";
+             require-instance false;
+             }
+             description
+               "This leaf identifies in which node the supporting
+                termination point is present.";
+           }
+           leaf tp-ref {
+             type leafref {
+               path "/nw:networks/nw:network[nw:network-id=current()/"+
+                 "../network-ref]/nw:node[nw:node-id=current()/../"+
+                 "node-ref]/termination-point/tp-id";
+               require-instance false;
+             }
+             description
+               "Reference to the underlay node (the underlay node must
+                be in a different topology).";
+           }
+         }
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network@2018-02-26.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network@2018-02-26.yang
new file mode 100644
index 0000000000000000000000000000000000000000..d9da81eeebefad9054a43af552de3d51f20bcd56
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-network@2018-02-26.yang
@@ -0,0 +1,193 @@
+   module ietf-network {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-network";
+     prefix nw;
+
+     import ietf-inet-types {
+       prefix inet;
+       reference
+         "RFC 6991: Common YANG Data Types";
+     }
+
+     organization
+       "IETF I2RS (Interface to the Routing System) Working Group";
+
+     contact
+       "WG Web:    <https://datatracker.ietf.org/wg/i2rs/>
+        WG List:   <mailto:i2rs@ietf.org>
+
+        Editor:    Alexander Clemm
+                   <mailto:ludwig@clemm.org>
+
+        Editor:    Jan Medved
+                   <mailto:jmedved@cisco.com>
+
+        Editor:    Robert Varga
+                   <mailto:robert.varga@pantheon.tech>
+
+        Editor:    Nitin Bahadur
+                   <mailto:nitin_bahadur@yahoo.com>
+
+        Editor:    Hariharan Ananthakrishnan
+                   <mailto:hari@packetdesign.com>
+
+        Editor:    Xufeng Liu
+                   <mailto:xufeng.liu.ietf@gmail.com>";
+
+     description
+       "This module defines a common base data model for a collection
+        of nodes in a network.  Node definitions are further used
+        in network topologies and inventories.
+
+        Copyright (c) 2018 IETF Trust and the persons identified as
+        authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC 8345;
+        see the RFC itself for full legal notices.";
+
+     revision 2018-02-26 {
+       description
+         "Initial revision.";
+       reference
+         "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     typedef node-id {
+       type inet:uri;
+       description
+         "Identifier for a node.  The precise structure of the node-id
+          will be up to the implementation.  For example, some
+          implementations MAY pick a URI that includes the network-id
+          as part of the path.  The identifier SHOULD be chosen
+          such that the same node in a real network topology will
+          always be identified through the same identifier, even if
+          the data model is instantiated in separate datastores.  An
+          implementation MAY choose to capture semantics in the
+          identifier -- for example, to indicate the type of node.";
+     }
+
+     typedef network-id {
+       type inet:uri;
+       description
+         "Identifier for a network.  The precise structure of the
+          network-id will be up to the implementation.  The identifier
+          SHOULD be chosen such that the same network will always be
+          identified through the same identifier, even if the data model
+          is instantiated in separate datastores.  An implementation MAY
+          choose to capture semantics in the identifier -- for example,
+          to indicate the type of network.";
+     }
+
+     grouping network-ref {
+       description
+         "Contains the information necessary to reference a network --
+          for example, an underlay network.";
+       leaf network-ref {
+         type leafref {
+           path "/nw:networks/nw:network/nw:network-id";
+         require-instance false;
+         }
+         description
+           "Used to reference a network -- for example, an underlay
+            network.";
+       }
+     }
+
+     grouping node-ref {
+       description
+         "Contains the information necessary to reference a node.";
+       leaf node-ref {
+         type leafref {
+           path "/nw:networks/nw:network[nw:network-id=current()/../"+
+             "network-ref]/nw:node/nw:node-id";
+           require-instance false;
+         }
+         description
+           "Used to reference a node.
+            Nodes are identified relative to the network that
+            contains them.";
+       }
+       uses network-ref;
+     }
+
+     container networks {
+       description
+         "Serves as a top-level container for a list of networks.";
+       list network {
+         key "network-id";
+         description
+           "Describes a network.
+            A network typically contains an inventory of nodes,
+            topological information (augmented through the
+            network-topology data model), and layering information.";
+         leaf network-id {
+           type network-id;
+           description
+             "Identifies a network.";
+         }
+         container network-types {
+           description
+             "Serves as an augmentation target.
+              The network type is indicated through corresponding
+              presence containers augmented into this container.";
+         }
+         list supporting-network {
+           key "network-ref";
+           description
+             "An underlay network, used to represent layered network
+              topologies.";
+           leaf network-ref {
+             type leafref {
+               path "/nw:networks/nw:network/nw:network-id";
+             require-instance false;
+             }
+             description
+               "References the underlay network.";
+           }
+         }
+
+         list node {
+           key "node-id";
+           description
+             "The inventory of nodes of this network.";
+           leaf node-id {
+             type node-id;
+             description
+               "Uniquely identifies a node within the containing
+                network.";
+           }
+           list supporting-node {
+             key "network-ref node-ref";
+             description
+               "Represents another node that is in an underlay network
+                and that supports this node.  Used to represent layering
+                structure.";
+             leaf network-ref {
+               type leafref {
+                 path "../../../nw:supporting-network/nw:network-ref";
+               require-instance false;
+               }
+               description
+                 "References the underlay network of which the
+                  underlay node is a part.";
+             }
+             leaf node-ref {
+               type leafref {
+                 path "/nw:networks/nw:network/nw:node/nw:node-id";
+               require-instance false;
+               }
+               description
+                 "References the underlay node itself.";
+             }
+           }
+         }
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-otn-topology@2023-07-06.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-otn-topology@2023-07-06.yang
new file mode 100644
index 0000000000000000000000000000000000000000..587612e8e7acb1f2eedb329b2f13a1a0626f3181
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-otn-topology@2023-07-06.yang
@@ -0,0 +1,2405 @@
+   module ietf-otn-topology {
+     yang-version 1.1;
+     namespace "urn:ietf:params:xml:ns:yang:ietf-otn-topology";
+     prefix "otnt";
+
+     import ietf-network {
+       prefix "nw";
+       reference "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-network-topology {
+       prefix "nt";
+       reference "RFC 8345: A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-te-topology {
+       prefix "tet";
+       reference
+         "RFC 8795: YANG Data Model for Traffic Engineering
+          (TE) Topologies";
+     }
+
+     import ietf-layer1-types {
+       prefix "l1-types";
+       reference
+         "I-D.ietf-ccamp-layer1-types: A YANG Data Model
+          for Layer 1 Types";
+     }
+
+     organization
+       "IETF CCAMP Working Group";
+     contact
+       "WG Web: <https://datatracker.ietf.org/wg/ccamp/>
+        WG List: <mailto:ccamp@ietf.org>
+
+        Editor: Haomian Zheng
+                <mailto:zhenghaomian@huawei.com>
+
+        Editor: Italo Busi
+                <mailto:italo.busi@huawei.com>
+
+        Editor: Xufeng Liu
+                <mailto:xufeng.liu.ietf@gmail.com>
+
+        Editor: Sergio Belotti
+                <mailto:sergio.belotti@nokia.com>
+
+
+
+
+        Editor: Oscar Gonzalez de Dios
+                <mailto:oscar.gonzalezdedios@telefonica.com>";
+
+     description
+       "This module defines a protocol independent Layer 1/ODU topology
+        data model. The model fully conforms
+        to the Network Management Datastore Architecture (NMDA).
+
+        Copyright (c) 2023 IETF Trust and the persons identified
+        as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Revised BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.
+
+        The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+        NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+        'MAY', and 'OPTIONAL' in this document are to be interpreted as
+        described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+        they appear in all capitals, as shown here.";
+
+     revision 2023-07-06 {
+       description
+         "Initial Revision";
+       reference
+         "RFC XXXX: A YANG Data Model for Optical Transport Network
+         Topology";
+       // RFC Ed.: replace XXXX with actual RFC number, update date
+       // information and remove this note
+     }
+
+     /*
+      * Groupings
+      */
+
+     grouping label-range-info {
+       description
+         "OTN technology-specific label range related information with
+         a presence container indicating that the label range is an
+         OTN technology-specific label range.
+
+         This grouping SHOULD be used together with the
+
+
+
+
+         otn-label-start-end and otn-label-step groupings to provide
+         OTN technology-specific label information to the models which
+         use the label-restriction-info grouping defined in the module
+         ietf-te-types.";
+       uses l1-types:otn-label-range-info {
+         refine otn-label-range {
+           presence
+             "Indicates the label range is an OTN label range.
+
+             This container MUST NOT be present if there are other
+             presence containers or attributes indicating another type
+             of label range.";
+         }
+       }
+     }
+
+    /*
+     * Data nodes
+     */
+
+     augment "/nw:networks/nw:network/nw:network-types/"
+           + "tet:te-topology" {
+       container otn-topology {
+         presence "indicates a topology type of Optical Transport
+                   Network (OTN)-electrical layer.";
+         description "OTN topology type";
+       }
+       description "augment network types to include OTN newtork";
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te"
+           + "/tet:te-node-attributes" {
+       when "../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description "Augment only for OTN network.";
+       }
+       description "Augment TE node attributes.";
+       container otn-node {
+         presence "The TE node is an OTN node.";
+         description
+           "Introduce new TE node type for OTN node.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes" {
+       when "../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+
+
+
+
+         description "Augment only for OTN network.";
+       }
+       description "Augment link configuration";
+
+       container otn-link {
+         description
+           "Attributes of the OTN Link.";
+         leaf odtu-flex-type {
+           type l1-types:odtu-flex-type;
+           description
+             "The type of Optical Data Tributary Unit (ODTU)
+             whose nominal bitrate is used to compute the number of
+             Tributary Slots (TS) required by the ODUflex LSPs set up
+             on this OTN Link.";
+         }
+         leaf tsg {
+           type identityref {
+             base l1-types:tributary-slot-granularity;
+           }
+           description "Tributary slot granularity.";
+           reference
+             "ITU-T G.709 v6.0 (06/2020): Interfaces for the Optical
+             Transport Network (OTN)";
+         }
+         leaf distance {
+           type uint32;
+           description "distance in the unit of kilometers";
+         }
+       }
+       container client-svc {
+         presence
+           "When present, indicates that the Link supports Costant
+           Bit Rate (CBR) client signals.";
+         description
+           "Attributes of the Link supporting CBR client signals.";
+         leaf-list supported-client-signal {
+           type identityref {
+             base l1-types:client-signal;
+           }
+           min-elements 1;
+           description
+             "List of client signal types supported by the Link.";
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/nt:termination-point/"
+           + "tet:te" {
+
+
+
+
+       when "../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description "Augment only for OTN network";
+       }
+       description "OTN TP attributes config in ODU topology.";
+
+       container otn-ltp {
+         description
+           "Attributes of the OTN Link Termination Point (LTP).";
+         leaf odtu-flex-type {
+           type l1-types:odtu-flex-type;
+           description
+             "The type of Optical Data Tributary Unit (ODTU)
+             whose nominal bitrate is used to compute the number of
+             Tributary Slots (TS) required by the ODUflex LSPs set up
+             on this OTN Link Termination Point (LTP).";
+         }
+       }
+       container client-svc {
+         presence
+           "When present, indicates that the Link Termination Point
+           (LTP) supports Costant Bit Rate (CBR) client signals.";
+         description
+           "OTN LTP Service attributes.";
+         leaf-list supported-client-signal {
+           type identityref {
+             base l1-types:client-signal;
+           }
+           description
+             "List of client signal types supported by the LTP.";
+         }
+       }
+     }
+
+     /*
+      * Augment TE bandwidth
+      */
+
+     augment "/nw:networks/nw:network/nw:node/nt:termination-point/"
+           + "tet:te/"
+           + "tet:interface-switching-capability/tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+
+
+
+
+       description
+         "Augment maximum LSP TE bandwidth for the link termination
+          point (LTP).";
+       case otn {
+         uses l1-types:otn-max-path-bandwidth {
+           description
+             "The odtu-flex-type attribute of the OTN Link Termination
+             Point (LTP) is used to compute the number of Tributary
+             Slots (TS) required by the ODUflex LSPs set up on this
+             OTN LTP.";
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the TE node
+          connectivity matrices.";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay paths of these OTN
+                 connectivity matrices.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+
+
+
+
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the
+          connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay path of this OTN
+                 connectivity matrix entry.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the TE node
+          connectivity matrices information source.";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+
+
+
+
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay paths of these OTN
+                 connectivity matrices.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-constraints/tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints of the
+          connectivity matrix entry information source";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay path of this OTN
+                 connectivity matrix entry.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:client-layer-adaptation/tet:switching-capability/"
+           + "tet:te-bandwidth/tet:technology" {
+
+
+
+
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment client TE bandwidth of the tunnel termination point
+          (TTP)";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 terminated on this OTN Tunnel Termination Point
+                 (TTP).";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/tet:path-constraints/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints for the TTP
+          Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+
+
+
+
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay paths of these OTN Local
+                 Link Connectivities.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/tet:path-constraints/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE bandwidth path constraints for the TTP
+          Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-link-bandwidth {
+           augment otn {
+             description
+               "Augment OTN link bandwidth information.";
+             leaf odtu-flex-type {
+               type l1-types:odtu-flex-type;
+               description
+                 "The type of Optical Data Tributary Unit (ODTU)
+                 whose nominal bitrate is used to compute the number of
+                 Tributary Slots (TS) required by the ODUflex LSPs
+                 set up along the underlay path of this OTN Local
+                 Link Connectivyt entry.";
+             }
+           }
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:interface-switching-capability/tet:max-lsp-bandwidth/"
+
+
+
+
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment maximum LSP TE bandwidth for the TE link.";
+       case otn {
+         uses l1-types:otn-max-path-bandwidth {
+           description
+             "The odtu-flex-type attribute of the OTN Link is used
+             to compute the number of Tributary Slots (TS) required
+             by the ODUflex LSPs set up on this OTN Link.";
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment maximum TE bandwidth for the TE link";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+
+
+
+
+       }
+       description
+         "Augment maximum reservable TE bandwidth for the TE link";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment unreserved TE bandwidth for the TE Link";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:interface-switching-capability/"
+           + "tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment maximum LSP TE bandwidth for the TE link
+          information source";
+       case otn {
+         uses l1-types:otn-max-path-bandwidth {
+           description
+
+
+
+
+             "The odtu-flex-type attribute of the OTN Link is used
+             to compute the number of Tributary Slots (TS) required
+             by the ODUflex LSPs set up on this OTN Link.";
+         }
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment maximum TE bandwidth for the TE link
+          information source";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment maximum reservable TE bandwidth for the TE link
+          information-source";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+
+
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment unreserved TE bandwidth of the TE link
+          information source";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on this OTN Link.";
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:interface-switching-capability/"
+           + "tet:max-lsp-bandwidth/"
+           + "tet:te-bandwidth/tet:technology" {
+       description
+         "Augment maximum LSP TE bandwidth of the TE link
+          template";
+       case otn {
+         uses l1-types:otn-max-path-bandwidth {
+           description
+             "The odtu-flex-type attribute of the OTN Link is used
+             to compute the number of Tributary Slots (TS) required
+             by the ODUflex LSPs set up on the OTN Link that uses this
+             Link Template.";
+         }
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:max-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment maximum TE bandwidth the TE link template";
+       uses l1-types:otn-link-bandwidth {
+         description
+
+
+
+
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on the OTN Link that uses this
+           Link Template.";
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:max-resv-link-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment maximum reservable TE bandwidth for the TE link
+          template.";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on the OTN Link that uses this
+           Link Template.";
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:unreserved-bandwidth/"
+           + "tet:te-bandwidth" {
+       description
+         "Augment unreserved TE bandwidth the TE link template";
+       uses l1-types:otn-link-bandwidth {
+         description
+           "The odtu-flex-type attribute of the OTN Link is used
+           to compute the number of Tributary Slots (TS) required
+           by the ODUflex LSPs set up on the OTN Link that uses this
+           Link Template.";
+       }
+     }
+
+     /*
+      * Augment TE label range information
+      */
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+
+
+
+
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the TE node
+          connectivity matrices.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the source LTP
+          of the connectivity matrix entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the destination LTP
+          of the connectivity matrix entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+
+
+
+
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the TE node
+          connectivity matrices information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the source LTP
+          of the connectivity matrix entry information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the destination LTP
+          of the connectivity matrix entry information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+
+
+
+
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the TTP
+          Local Link Connectivities.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the TTP
+          Local Link Connectivity entry.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range information for the TE link.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       when "../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+
+
+
+
+       }
+       description
+         "Augment TE label range information for the TE link
+          information source.";
+       uses label-range-info;
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction" {
+       description
+         "Augment TE label range information for the TE link template.";
+       uses label-range-info;
+     }
+
+     /*
+      * Augment TE label
+      */
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TE node
+          connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/"
+           + "tet:label-restriction/tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+
+
+
+
+       }
+       description
+         "Augment TE label range end for the TE node
+          connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:label-restrictions/"
+           + "tet:label-restriction/tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the TE node
+          connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:underlay/tet:primary-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path of the
+          TE node connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+
+
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:underlay/tet:backup-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path of the
+          TE node connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TE node connectivity
+          matrices";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+
+
+
+
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TE node connectivity
+          matrices";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TE node connectivity matrices";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+
+
+
+
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the source LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the source LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:from/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+
+
+
+
+         "Augment TE label range step for the source LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the destination LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the destination LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+
+
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:to/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the destination LTP
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:primary-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:backup-path/tet:path-element/"
+           + "tet:type/tet:label/tet:label-hop/"
+           + "tet:te-label/tet:technology" {
+
+
+
+
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:optimizations/"
+           + "tet:algorithm/tet:metric/tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/tet:optimizations/"
+           + "tet:algorithm/tet:metric/tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+
+
+
+
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:te-node-attributes/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the connectivity matrix entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TE node connectivity
+          matrices information source.";
+       case otn {
+
+
+
+
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the TE node connectivity
+          matrices information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:connectivity-matrices/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the TE node connectivity
+          matrices information source.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+
+
+
+
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE node connectivity matrices of the information
+          source entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE node connectivity matrices of the information
+          source entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+
+
+
+
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TE node connectivity matrices
+          information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TE node connectivity matrices
+          information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+
+
+
+
+          of the TE node connectivity matrices information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the source LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the source LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+
+
+
+
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:from/tet:label-restrictions/"
+           + "tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the source LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the destination LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+
+
+
+
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the destination LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:to/tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the destination LTP
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the connectivity matrix entry information source.";
+       case otn {
+
+
+
+
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the connectivity matrix entry
+          information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+
+
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the connectivity matrix entry
+          information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:information-source-entry/tet:connectivity-matrices/"
+           + "tet:connectivity-matrix/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the connectivity matrix entry information source.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+         + "tet:tunnel-termination-point/"
+         + "tet:local-link-connectivities/"
+
+
+
+
+         + "tet:label-restrictions/tet:label-restriction/"
+         + "tet:label-start/"
+         + "tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TTP
+          Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/"
+           + "tet:te-label/tet:technology"{
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the TTP
+          Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/"
+           + "tet:technology"{
+       when "../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+
+
+
+
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the TTP
+          Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TTP Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TTP Local Link Connectivities.";
+       case otn {
+
+
+
+
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TTP Local Link
+          Connectivities.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TTP Local Link
+          Connectivities.";
+       case otn {
+
+
+
+
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TTP Local Link Connectivities.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TTP
+          Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+
+
+
+
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the TTP
+          Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the TTP
+          Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+
+
+
+
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TTP Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TTP Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-exclude-objects/"
+           + "tet:route-object-exclude-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+
+
+
+
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects excluded
+          by the path computation of the TTP Local Link
+          Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:optimizations/tet:algorithm/tet:metric/"
+           + "tet:optimization-metric/"
+           + "tet:explicit-route-include-objects/"
+           + "tet:route-object-include-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the explicit route objects included
+          by the path computation of the TTP Local Link
+          Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nw:node/tet:te/"
+           + "tet:tunnel-termination-point/"
+           + "tet:local-link-connectivities/"
+           + "tet:local-link-connectivity/"
+           + "tet:path-properties/tet:path-route-objects/"
+           + "tet:path-route-object/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+
+
+
+
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the computed path route objects
+          of the TTP Local Link Connectivity entry.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE link.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       when "../../../../../../../../"
+          + "nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE link.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+
+
+
+
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TE link.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the TE link.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range step for the TE link.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+
+
+
+
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range start for the TE link
+          information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       when "../../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+       description
+         "Augment TE label range end for the TE link
+          information source.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/nw:network/nt:link/tet:te/"
+           + "tet:information-source-entry/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       when "../../../../../../nw:network-types/tet:te-topology/"
+          + "otnt:otn-topology" {
+         description
+           "Augmentation parameters apply only for networks with
+            OTN topology type.";
+       }
+
+
+
+
+       description
+         "Augment TE label range step for the TE link
+          information source.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:underlay/tet:primary-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       description
+         "Augment TE label hop for the underlay primary path
+          of the TE link template.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:underlay/tet:backup-path/tet:path-element/tet:type/"
+           + "tet:label/tet:label-hop/tet:te-label/tet:technology" {
+       description
+         "Augment TE label hop for the underlay backup path
+          of the TE link template.";
+       case otn {
+         uses l1-types:otn-label-hop;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-start/tet:te-label/tet:technology" {
+       description
+         "Augment TE label range start for the TE link template.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-end/tet:te-label/tet:technology" {
+       description
+
+
+
+
+         "Augment TE label range end for the TE link template.";
+       case otn {
+         uses l1-types:otn-label-start-end;
+       }
+     }
+
+     augment "/nw:networks/tet:te/tet:templates/"
+           + "tet:link-template/tet:te-link-attributes/"
+           + "tet:label-restrictions/tet:label-restriction/"
+           + "tet:label-step/tet:technology" {
+       description
+         "Augment TE label range step for the TE link template.";
+       case otn {
+         uses l1-types:otn-label-step;
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-packet-fields@2019-03-04.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-packet-fields@2019-03-04.yang
new file mode 100644
index 0000000000000000000000000000000000000000..2fb797bd87bf4ed825f83ec788df707b94c5f68b
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-packet-fields@2019-03-04.yang
@@ -0,0 +1,576 @@
+module ietf-packet-fields {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-packet-fields";
+  prefix packet-fields;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991 - Common YANG Data Types.";
+  }
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991 - Common YANG Data Types.";
+  }
+
+  import ietf-ethertypes {
+    prefix eth;
+    reference
+      "RFC 8519 - YANG Data Model for Network Access Control
+                  Lists (ACLs).";
+  }
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group.";
+
+  contact
+    "WG Web:  <https://datatracker.ietf.org/wg/netmod/>
+     WG List: netmod@ietf.org
+
+     Editor: Mahesh Jethanandani
+             mjethanandani@gmail.com
+     Editor: Lisa Huang
+             huangyi_99@yahoo.com
+     Editor: Sonal Agarwal
+             sagarwal12@gmail.com
+     Editor: Dana Blair
+             dana@blairhome.com";
+
+  description
+    "This YANG module defines groupings that are used by
+     the ietf-access-control-list YANG module.  Their usage
+     is not limited to ietf-access-control-list and can be
+     used anywhere as applicable.
+
+     Copyright (c) 2019 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's Legal
+     Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8519; see
+     the RFC itself for full legal notices.";
+
+  revision 2019-03-04 {
+    description
+      "Initial version.";
+    reference
+      "RFC 8519: YANG Data Model for Network Access Control
+                 Lists (ACLs).";
+  }
+
+  /*
+   * Typedefs
+   */
+  typedef operator {
+    type enumeration {
+      enum lte {
+        description
+          "Less than or equal to.";
+      }
+      enum gte {
+        description
+          "Greater than or equal to.";
+      }
+      enum eq {
+        description
+          "Equal to.";
+      }
+      enum neq {
+        description
+          "Not equal to.";
+      }
+    }
+    description
+      "The source and destination port range definitions
+       can be further qualified using an operator.  An
+       operator is needed only if the lower-port is specified
+       and the upper-port is not specified.  The operator
+       therefore further qualifies the lower-port only.";
+  }
+
+  /*
+   * Groupings
+   */
+  grouping port-range-or-operator {
+    choice port-range-or-operator {
+      case range {
+        leaf lower-port {
+          type inet:port-number;
+          must '. <= ../upper-port' {
+            error-message
+              "The lower-port must be less than or equal to
+               the upper-port.";
+          }
+          mandatory true;
+          description
+            "Lower boundary for a port.";
+        }
+        leaf upper-port {
+          type inet:port-number;
+          mandatory true;
+          description
+            "Upper boundary for a port.";
+        }
+      }
+      case operator {
+        leaf operator {
+          type operator;
+          default "eq";
+          description
+            "Operator to be applied on the port below.";
+        }
+        leaf port {
+          type inet:port-number;
+          mandatory true;
+          description
+            "Port number along with the operator on which to
+             match.";
+        }
+      }
+      description
+        "Choice of specifying a port range or a single
+         port along with an operator.";
+    }
+    description
+      "Grouping for port definitions in the form of a
+       choice statement.";
+  }
+
+  grouping acl-ip-header-fields {
+    description
+      "IP header fields common to IPv4 and IPv6";
+    reference
+      "RFC 791: Internet Protocol.";
+
+    leaf dscp {
+      type inet:dscp;
+      description
+        "Differentiated Services Code Point.";
+      reference
+        "RFC 2474: Definition of the Differentiated Services
+                   Field (DS Field) in the IPv4 and IPv6
+                   Headers.";
+    }
+
+    leaf ecn {
+      type uint8 {
+        range "0..3";
+      }
+      description
+        "Explicit Congestion Notification.";
+      reference
+        "RFC 3168: The Addition of Explicit Congestion
+                   Notification (ECN) to IP.";
+    }
+
+    leaf length {
+      type uint16;
+      description
+        "In the IPv4 header field, this field is known as the Total
+         Length.  Total Length is the length of the datagram, measured
+         in octets, including internet header and data.
+
+         In the IPv6 header field, this field is known as the Payload
+         Length, which is the length of the IPv6 payload, i.e., the rest
+         of the packet following the IPv6 header, in octets.";
+      reference
+        "RFC 791: Internet Protocol
+         RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.";
+    }
+    leaf ttl {
+      type uint8;
+      description
+        "This field indicates the maximum time the datagram is allowed
+         to remain in the internet system.  If this field contains the
+         value zero, then the datagram must be dropped.
+
+         In IPv6, this field is known as the Hop Limit.";
+      reference
+        "RFC 791: Internet Protocol
+         RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.";
+    }
+    leaf protocol {
+      type uint8;
+      description
+        "Internet Protocol number.  Refers to the protocol of the
+         payload.  In IPv6, this field is known as 'next-header',
+         and if extension headers are present, the protocol is
+         present in the 'upper-layer' header.";
+      reference
+        "RFC 791: Internet Protocol
+         RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.";
+    }
+  }
+
+  grouping acl-ipv4-header-fields {
+    description
+      "Fields in the IPv4 header.";
+    leaf ihl {
+      type uint8 {
+        range "5..60";
+      }
+      description
+        "In an IPv4 header field, the Internet Header Length (IHL) is
+         the length of the internet header in 32-bit words and
+         thus points to the beginning of the data.  Note that the
+         minimum value for a correct header is 5.";
+    }
+    leaf flags {
+      type bits {
+        bit reserved {
+          position 0;
+          description
+            "Reserved.  Must be zero.";
+        }
+        bit fragment {
+          position 1;
+          description
+            "Setting the value to 0 indicates may fragment, while
+             setting the value to 1 indicates do not fragment.";
+        }
+        bit more {
+          position 2;
+          description
+            "Setting the value to 0 indicates this is the last fragment,
+             and setting the value to 1 indicates more fragments are
+             coming.";
+        }
+      }
+      description
+        "Bit definitions for the Flags field in the IPv4 header.";
+    }
+    leaf offset {
+      type uint16 {
+        range "20..65535";
+      }
+      description
+        "The fragment offset is measured in units of 8 octets (64 bits).
+         The first fragment has offset zero.  The length is 13 bits";
+    }
+    leaf identification {
+      type uint16;
+      description
+        "An identifying value assigned by the sender to aid in
+         assembling the fragments of a datagram.";
+    }
+
+    choice destination-network {
+      case destination-ipv4-network {
+        leaf destination-ipv4-network {
+          type inet:ipv4-prefix;
+          description
+            "Destination IPv4 address prefix.";
+        }
+      }
+      description
+        "Choice of specifying a destination IPv4 address or
+         referring to a group of IPv4 destination addresses.";
+    }
+
+    choice source-network {
+      case source-ipv4-network {
+        leaf source-ipv4-network {
+          type inet:ipv4-prefix;
+          description
+            "Source IPv4 address prefix.";
+        }
+      }
+      description
+        "Choice of specifying a source IPv4 address or
+         referring to a group of IPv4 source addresses.";
+    }
+  }
+
+  grouping acl-ipv6-header-fields {
+    description
+      "Fields in the IPv6 header.";
+
+    choice destination-network {
+      case destination-ipv6-network {
+        leaf destination-ipv6-network {
+          type inet:ipv6-prefix;
+          description
+            "Destination IPv6 address prefix.";
+        }
+      }
+      description
+        "Choice of specifying a destination IPv6 address
+         or referring to a group of IPv6 destination
+         addresses.";
+    }
+
+    choice source-network {
+      case source-ipv6-network {
+        leaf source-ipv6-network {
+          type inet:ipv6-prefix;
+          description
+            "Source IPv6 address prefix.";
+        }
+      }
+      description
+        "Choice of specifying a source IPv6 address or
+         referring to a group of IPv6 source addresses.";
+    }
+
+    leaf flow-label {
+      type inet:ipv6-flow-label;
+      description
+        "IPv6 Flow label.";
+    }
+    reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+       RFC 4007: IPv6 Scoped Address Architecture
+       RFC 5952: A Recommendation for IPv6 Address Text
+                 Representation.";
+  }
+
+  grouping acl-eth-header-fields {
+    description
+      "Fields in the Ethernet header.";
+    leaf destination-mac-address {
+      type yang:mac-address;
+      description
+        "Destination IEEE 802 Media Access Control (MAC)
+         address.";
+    }
+    leaf destination-mac-address-mask {
+      type yang:mac-address;
+      description
+        "Destination IEEE 802 MAC address mask.";
+    }
+    leaf source-mac-address {
+      type yang:mac-address;
+      description
+        "Source IEEE 802 MAC address.";
+    }
+    leaf source-mac-address-mask {
+      type yang:mac-address;
+      description
+        "Source IEEE 802 MAC address mask.";
+    }
+    leaf ethertype {
+      type eth:ethertype;
+      description
+        "The Ethernet Type (or Length) value represented
+         in the canonical order defined by IEEE 802.
+         The canonical representation uses lowercase
+         characters.";
+      reference
+        "IEEE 802-2014, Clause 9.2.";
+    }
+    reference
+      "IEEE 802: IEEE Standard for Local and Metropolitan
+       Area Networks: Overview and Architecture.";
+  }
+
+  grouping acl-tcp-header-fields {
+    description
+      "Collection of TCP header fields that can be used to
+       set up a match filter.";
+    leaf sequence-number {
+      type uint32;
+      description
+        "Sequence number that appears in the packet.";
+    }
+    leaf acknowledgement-number {
+      type uint32;
+      description
+        "The acknowledgement number that appears in the
+         packet.";
+    }
+    leaf data-offset {
+      type uint8 {
+        range "5..15";
+      }
+      description
+        "Specifies the size of the TCP header in 32-bit
+         words.  The minimum size header is 5 words and
+         the maximum is 15 words; thus, this gives a
+         minimum size of 20 bytes and a maximum of 60
+         bytes, allowing for up to 40 bytes of options
+         in the header.";
+    }
+    leaf reserved {
+      type uint8;
+      description
+        "Reserved for future use.";
+    }
+    leaf flags {
+      type bits {
+        bit cwr {
+          position 1;
+          description
+            "The Congestion Window Reduced (CWR) flag is set
+             by the sending host to indicate that it received
+             a TCP segment with the ECN-Echo (ECE) flag set
+             and had responded in the congestion control
+             mechanism.";
+          reference
+            "RFC 3168: The Addition of Explicit Congestion
+                       Notification (ECN) to IP.";
+        }
+        bit ece {
+          position 2;
+          description
+            "ECN-Echo has a dual role, depending on the value
+             of the SYN flag.  It indicates the following: if
+             the SYN flag is set (1), the TCP peer is ECN
+             capable, and if the SYN flag is clear (0), a packet
+             with the Congestion Experienced flag set (ECN=11)
+             in the IP header was received during normal
+             transmission (added to the header by RFC 3168).
+             This serves as an indication of network congestion
+             (or impending congestion) to the TCP sender.";
+          reference
+            "RFC 3168: The Addition of Explicit Congestion
+                       Notification (ECN) to IP.";
+        }
+        bit urg {
+          position 3;
+          description
+            "Indicates that the Urgent Pointer field is significant.";
+        }
+        bit ack {
+          position 4;
+          description
+            "Indicates that the Acknowledgement field is significant.
+             All packets after the initial SYN packet sent by the
+             client should have this flag set.";
+        }
+        bit psh {
+          position 5;
+          description
+            "Push function.  Asks to push the buffered data to the
+             receiving application.";
+        }
+        bit rst {
+          position 6;
+          description
+            "Reset the connection.";
+        }
+        bit syn {
+          position 7;
+          description
+            "Synchronize sequence numbers.  Only the first packet
+             sent from each end should have this flag set.  Some
+             other flags and fields change meaning based on this
+             flag, and some are only valid for when it is set,
+             and others when it is clear.";
+        }
+        bit fin {
+          position 8;
+          description
+            "Last package from the sender.";
+        }
+      }
+      description
+        "Also known as Control Bits.  Contains nine 1-bit flags.";
+      reference
+        "RFC 793: Transmission Control Protocol.";
+    }
+    leaf window-size {
+      type uint16;
+      units "bytes";
+      description
+        "The size of the receive window, which specifies
+         the number of window size units beyond the segment
+         identified by the sequence number in the Acknowledgement
+         field that the sender of this segment is currently
+         willing to receive.";
+    }
+    leaf urgent-pointer {
+      type uint16;
+      description
+        "This field is an offset from the sequence number
+         indicating the last urgent data byte.";
+    }
+    leaf options {
+      type binary {
+        length "1..40";
+      }
+      description
+        "The length of this field is determined by the
+         Data Offset field.  Options have up to three
+         fields: Option-Kind (1 byte), Option-Length
+         (1 byte), and Option-Data (variable).  The Option-Kind
+         field indicates the type of option and is the
+         only field that is not optional.  Depending on
+         what kind of option we are dealing with,
+         the next two fields may be set: the Option-Length
+         field indicates the total length of the option,
+         and the Option-Data field contains the value of
+         the option, if applicable.";
+    }
+  }
+
+  grouping acl-udp-header-fields {
+    description
+      "Collection of UDP header fields that can be used
+       to set up a match filter.";
+    leaf length {
+      type uint16;
+      description
+        "A field that specifies the length in bytes of
+         the UDP header and UDP data.  The minimum
+         length is 8 bytes because that is the length of
+         the header.  The field size sets a theoretical
+         limit of 65,535 bytes (8-byte header plus 65,527
+         bytes of data) for a UDP datagram.  However, the
+         actual limit for the data length, which is
+         imposed by the underlying IPv4 protocol, is
+         65,507 bytes (65,535 minus 8-byte UDP header
+         minus 20-byte IP header).
+
+         In IPv6 jumbograms, it is possible to have
+         UDP packets of a size greater than 65,535 bytes.
+         RFC 2675 specifies that the Length field is set
+         to zero if the length of the UDP header plus
+         UDP data is greater than 65,535.";
+    }
+  }
+
+  grouping acl-icmp-header-fields {
+    description
+      "Collection of ICMP header fields that can be
+       used to set up a match filter.";
+    leaf type {
+      type uint8;
+      description
+        "Also known as control messages.";
+      reference
+        "RFC 792: Internet Control Message Protocol
+         RFC 4443: Internet Control Message Protocol (ICMPv6)
+                   for Internet Protocol Version 6 (IPv6)
+                   Specification.";
+    }
+    leaf code {
+      type uint8;
+      description
+        "ICMP subtype.  Also known as control messages.";
+      reference
+        "RFC 792: Internet Control Message Protocol
+         RFC 4443: Internet Control Message Protocol (ICMPv6)
+                   for Internet Protocol Version 6 (IPv6)
+                   Specification.";
+    }
+    leaf rest-of-header {
+      type binary;
+      description
+        "Unbounded in length, the contents vary based on the
+         ICMP type and code.  Also referred to as 'Message Body'
+         in ICMPv6.";
+      reference
+        "RFC 792: Internet Control Message Protocol
+         RFC 4443: Internet Control Message Protocol (ICMPv6)
+                   for Internet Protocol Version 6 (IPv6)
+                   Specification.";
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-routing-types@2017-12-04.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-routing-types@2017-12-04.yang
new file mode 100644
index 0000000000000000000000000000000000000000..695d9eaeb9e771b945397c8b1c817ce91b0414af
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-routing-types@2017-12-04.yang
@@ -0,0 +1,774 @@
+   module ietf-routing-types {
+     namespace "urn:ietf:params:xml:ns:yang:ietf-routing-types";
+     prefix rt-types;
+
+     import ietf-yang-types {
+       prefix yang;
+     }
+     import ietf-inet-types {
+       prefix inet;
+     }
+
+     organization
+       "IETF RTGWG - Routing Area Working Group";
+     contact
+       "WG Web:   <https://datatracker.ietf.org/wg/rtgwg/>
+        WG List:  <mailto:rtgwg@ietf.org>
+
+        Editors:  Xufeng Liu
+                  <mailto:Xufeng_Liu@jabail.com>
+                  Yingzhen Qu
+                  <mailto:yingzhen.qu@huawei.com>
+                  Acee Lindem
+                  <mailto:acee@cisco.com>
+                  Christian Hopps
+                  <mailto:chopps@chopps.org>
+                  Lou Berger
+                  <mailto:lberger@labn.com>";
+
+     description
+       "This module contains a collection of YANG data types
+        considered generally useful for routing protocols.
+
+        Copyright (c) 2017 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+
+        This version of this YANG module is part of RFC 8294; see
+        the RFC itself for full legal notices.";
+
+      revision 2017-12-04 {
+        description "Initial revision.";
+        reference
+          "RFC 8294: Common YANG Data Types for the Routing Area.
+           Section 3.";
+     }
+
+     /*** Identities related to MPLS/GMPLS ***/
+
+     identity mpls-label-special-purpose-value {
+       description
+         "Base identity for deriving identities describing
+          special-purpose Multiprotocol Label Switching (MPLS) label
+          values.";
+       reference
+         "RFC 7274: Allocating and Retiring Special-Purpose MPLS
+          Labels.";
+     }
+
+     identity ipv4-explicit-null-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the IPv4 Explicit NULL Label.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.  Section 2.1.";
+     }
+
+     identity router-alert-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the Router Alert Label.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.  Section 2.1.";
+     }
+
+     identity ipv6-explicit-null-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the IPv6 Explicit NULL Label.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.  Section 2.1.";
+     }
+
+     identity implicit-null-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the Implicit NULL Label.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.  Section 2.1.";
+     }
+
+     identity entropy-label-indicator {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the Entropy Label Indicator.";
+       reference
+         "RFC 6790: The Use of Entropy Labels in MPLS Forwarding.
+          Sections 3 and 10.1.";
+     }
+
+     identity gal-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the Generic Associated Channel
+          (G-ACh) Label (GAL).";
+       reference
+         "RFC 5586: MPLS Generic Associated Channel.
+          Sections 4 and 10.";
+     }
+
+     identity oam-alert-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the OAM Alert Label.";
+       reference
+         "RFC 3429: Assignment of the 'OAM Alert Label' for
+          Multiprotocol Label Switching Architecture (MPLS)
+          Operation and Maintenance (OAM) Functions.
+          Sections 3 and 6.";
+     }
+
+     identity extension-label {
+       base mpls-label-special-purpose-value;
+       description
+         "This identity represents the Extension Label.";
+       reference
+         "RFC 7274: Allocating and Retiring Special-Purpose MPLS
+          Labels.  Sections 3.1 and 5.";
+     }
+
+     /*** Collection of types related to routing ***/
+
+     typedef router-id {
+       type yang:dotted-quad;
+       description
+         "A 32-bit number in the dotted-quad format assigned to each
+          router.  This number uniquely identifies the router within
+          an Autonomous System.";
+     }
+
+     /*** Collection of types related to VPNs ***/
+
+     typedef route-target {
+       type string {
+         pattern
+           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+         +     '42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+         +     '42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+         +     '655[0-2][0-9]|'
+         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|'
+         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|'
+         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(6(:[a-fA-F0-9]{2}){6})|'
+         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+         +     '[0-9a-fA-F]{1,12})';
+       }
+
+       description
+         "A Route Target is an 8-octet BGP extended community
+          initially identifying a set of sites in a BGP VPN
+          (RFC 4364).  However, it has since taken on a more general
+          role in BGP route filtering.  A Route Target consists of two
+          or three fields: a 2-octet Type field, an administrator
+          field, and, optionally, an assigned number field.
+
+          According to the data formats for types 0, 1, 2, and 6 as
+          defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+          pattern is defined as:
+
+          0:2-octet-asn:4-octet-number
+          1:4-octet-ipv4addr:2-octet-number
+          2:4-octet-asn:2-octet-number
+          6:6-octet-mac-address
+
+          Additionally, a generic pattern is defined for future
+          Route Target types:
+
+          2-octet-other-hex-number:6-octet-hex-number
+
+          Some valid examples are 0:100:100, 1:1.1.1.1:100,
+          2:1234567890:203, and 6:26:00:08:92:78:00.";
+       reference
+         "RFC 4360: BGP Extended Communities Attribute.
+          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+          RFC 5668: 4-Octet AS Specific BGP Extended Community.
+          RFC 7432: BGP MPLS-Based Ethernet VPN.";
+     }
+
+     typedef ipv6-route-target {
+       type string {
+         pattern
+             '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
+             + ':'
+             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+             + '6[0-4][0-9]{3}|'
+             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+         pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
+             + ':'
+             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+             + '6[0-4][0-9]{3}|'
+             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+       }
+       description
+         "An IPv6 Route Target is a 20-octet BGP IPv6 Address
+          Specific Extended Community serving the same function
+          as a standard 8-octet Route Target, except that it only
+          allows an IPv6 address as the global administrator.
+          The format is <ipv6-address:2-octet-number>.
+
+          Two valid examples are 2001:db8::1:6544 and
+          2001:db8::5eb1:791:6b37:17958.";
+       reference
+         "RFC 5701: IPv6 Address Specific BGP Extended Community
+          Attribute.";
+     }
+
+     typedef route-target-type {
+       type enumeration {
+         enum import {
+           value 0;
+           description
+             "The Route Target applies to route import.";
+         }
+         enum export {
+           value 1;
+           description
+             "The Route Target applies to route export.";
+         }
+
+         enum both {
+           value 2;
+           description
+             "The Route Target applies to both route import and
+              route export.";
+         }
+       }
+       description
+         "Indicates the role a Route Target takes in route filtering.";
+       reference
+         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).";
+     }
+
+     typedef route-distinguisher {
+       type string {
+         pattern
+           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+         +     '42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+         +     '42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+         +     '655[0-2][0-9]|'
+         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|'
+         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|'
+         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(6(:[a-fA-F0-9]{2}){6})|'
+         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+         +     '[0-9a-fA-F]{1,12})';
+       }
+
+       description
+         "A Route Distinguisher is an 8-octet value used to
+          distinguish routes from different BGP VPNs (RFC 4364).
+          A Route Distinguisher will have the same format as a
+          Route Target as per RFC 4360 and will consist of
+          two or three fields: a 2-octet Type field, an administrator
+          field, and, optionally, an assigned number field.
+
+          According to the data formats for types 0, 1, 2, and 6 as
+          defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+          pattern is defined as:
+
+          0:2-octet-asn:4-octet-number
+          1:4-octet-ipv4addr:2-octet-number
+          2:4-octet-asn:2-octet-number
+          6:6-octet-mac-address
+
+          Additionally, a generic pattern is defined for future
+          route discriminator types:
+
+          2-octet-other-hex-number:6-octet-hex-number
+
+          Some valid examples are 0:100:100, 1:1.1.1.1:100,
+          2:1234567890:203, and 6:26:00:08:92:78:00.";
+       reference
+         "RFC 4360: BGP Extended Communities Attribute.
+          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+          RFC 5668: 4-Octet AS Specific BGP Extended Community.
+          RFC 7432: BGP MPLS-Based Ethernet VPN.";
+     }
+
+     typedef route-origin {
+       type string {
+         pattern
+           '(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|'
+         +     '42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|429496[0-6][0-9]{3}|'
+         +     '42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|429[0-3][0-9]{6}|'
+         +     '42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|'
+         + '(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|'
+         +     '25[0-5])\.){3}([0-9]|[1-9][0-9]|'
+         +     '1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|'
+         +     '655[0-2][0-9]|'
+         +     '65[0-4][0-9]{2}|6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(2:(429496729[0-5]|42949672[0-8][0-9]|'
+         +     '4294967[01][0-9]{2}|'
+         +     '429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|'
+         +     '4294[0-8][0-9]{5}|'
+         +     '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|'
+         +     '[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):'
+         +     '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+         +     '6[0-4][0-9]{3}|'
+         +     '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|'
+         + '(6(:[a-fA-F0-9]{2}){6})|'
+         + '(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):'
+         +    '[0-9a-fA-F]{1,12})';
+       }
+       description
+         "A Route Origin is an 8-octet BGP extended community
+          identifying the set of sites where the BGP route
+          originated (RFC 4364).  A Route Origin will have the same
+          format as a Route Target as per RFC 4360 and will consist
+          of two or three fields: a 2-octet Type field, an
+          administrator field, and, optionally, an assigned number
+          field.
+
+          According to the data formats for types 0, 1, 2, and 6 as
+          defined in RFC 4360, RFC 5668, and RFC 7432, the encoding
+          pattern is defined as:
+
+          0:2-octet-asn:4-octet-number
+          1:4-octet-ipv4addr:2-octet-number
+          2:4-octet-asn:2-octet-number
+          6:6-octet-mac-address
+
+          Additionally, a generic pattern is defined for future
+          Route Origin types:
+
+          2-octet-other-hex-number:6-octet-hex-number
+
+          Some valid examples are 0:100:100, 1:1.1.1.1:100,
+          2:1234567890:203, and 6:26:00:08:92:78:00.";
+       reference
+         "RFC 4360: BGP Extended Communities Attribute.
+          RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+          RFC 5668: 4-Octet AS Specific BGP Extended Community.
+          RFC 7432: BGP MPLS-Based Ethernet VPN.";
+     }
+
+     typedef ipv6-route-origin {
+       type string {
+         pattern
+             '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))'
+             + ':'
+             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+             + '6[0-4][0-9]{3}|'
+             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+         pattern '((([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))'
+             + ':'
+             + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|'
+             + '6[0-4][0-9]{3}|'
+             + '[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
+       }
+       description
+         "An IPv6 Route Origin is a 20-octet BGP IPv6 Address
+          Specific Extended Community serving the same function
+          as a standard 8-octet route, except that it only allows
+          an IPv6 address as the global administrator.  The format
+          is <ipv6-address:2-octet-number>.
+
+          Two valid examples are 2001:db8::1:6544 and
+          2001:db8::5eb1:791:6b37:17958.";
+       reference
+         "RFC 5701: IPv6 Address Specific BGP Extended Community
+          Attribute.";
+     }
+
+     /*** Collection of types common to multicast ***/
+
+     typedef ipv4-multicast-group-address {
+       type inet:ipv4-address {
+         pattern '(2((2[4-9])|(3[0-9]))\.).*';
+       }
+       description
+         "This type represents an IPv4 multicast group address,
+          which is in the range of 224.0.0.0 to 239.255.255.255.";
+       reference
+         "RFC 1112: Host Extensions for IP Multicasting.";
+     }
+
+     typedef ipv6-multicast-group-address {
+       type inet:ipv6-address {
+         pattern '(([fF]{2}[0-9a-fA-F]{2}):).*';
+       }
+       description
+         "This type represents an IPv6 multicast group address,
+          which is in the range of ff00::/8.";
+       reference
+         "RFC 4291: IP Version 6 Addressing Architecture.  Section 2.7.
+          RFC 7346: IPv6 Multicast Address Scopes.";
+     }
+
+     typedef ip-multicast-group-address {
+       type union {
+         type ipv4-multicast-group-address;
+         type ipv6-multicast-group-address;
+       }
+       description
+         "This type represents a version-neutral IP multicast group
+          address.  The format of the textual representation implies
+          the IP version.";
+     }
+
+     typedef ipv4-multicast-source-address {
+       type union {
+         type enumeration {
+           enum * {
+             description
+               "Any source address.";
+           }
+         }
+         type inet:ipv4-address;
+       }
+       description
+         "Multicast source IPv4 address type.";
+     }
+
+     typedef ipv6-multicast-source-address {
+       type union {
+         type enumeration {
+           enum * {
+             description
+               "Any source address.";
+           }
+         }
+         type inet:ipv6-address;
+       }
+       description
+         "Multicast source IPv6 address type.";
+     }
+
+     /*** Collection of types common to protocols ***/
+
+     typedef bandwidth-ieee-float32 {
+       type string {
+         pattern
+           '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+         + '1(\.([0-9a-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|'
+         + '1[01][0-9]|0?[0-9]?[0-9])?)';
+       }
+       description
+         "Bandwidth in IEEE 754 floating-point 32-bit binary format:
+          (-1)**(S) * 2**(Exponent-127) * (1 + Fraction),
+          where Exponent uses 8 bits and Fraction uses 23 bits.
+          The units are octets per second.
+          The encoding format is the external hexadecimal-significant
+          character sequences specified in IEEE 754 and ISO/IEC C99.
+          The format is restricted to be normalized, non-negative, and
+          non-fraction: 0x1.hhhhhhp{+}d, 0X1.HHHHHHP{+}D, or 0x0p0,
+          where 'h' and 'H' are hexadecimal digits and 'd' and 'D' are
+          integers in the range of [0..127].
+
+          When six hexadecimal digits are used for 'hhhhhh' or
+          'HHHHHH', the least significant digit must be an even
+          number.  'x' and 'X' indicate hexadecimal; 'p' and 'P'
+          indicate a power of two.  Some examples are 0x0p0, 0x1p10,
+          and 0x1.abcde2p+20.";
+       reference
+         "IEEE Std 754-2008: IEEE Standard for Floating-Point
+          Arithmetic.
+          ISO/IEC C99: Information technology - Programming
+          Languages - C.";
+     }
+
+     typedef link-access-type {
+       type enumeration {
+         enum broadcast {
+           description
+             "Specify broadcast multi-access network.";
+         }
+         enum non-broadcast-multiaccess {
+           description
+             "Specify Non-Broadcast Multi-Access (NBMA) network.";
+         }
+         enum point-to-multipoint {
+           description
+             "Specify point-to-multipoint network.";
+         }
+         enum point-to-point {
+           description
+             "Specify point-to-point network.";
+         }
+       }
+       description
+         "Link access type.";
+     }
+
+     typedef timer-multiplier {
+       type uint8;
+       description
+         "The number of timer value intervals that should be
+          interpreted as a failure.";
+     }
+
+     typedef timer-value-seconds16 {
+       type union {
+         type uint16 {
+           range "1..65535";
+         }
+         type enumeration {
+           enum infinity {
+             description
+               "The timer is set to infinity.";
+           }
+           enum not-set {
+             description
+               "The timer is not set.";
+           }
+         }
+       }
+       units "seconds";
+       description
+         "Timer value type, in seconds (16-bit range).";
+     }
+
+     typedef timer-value-seconds32 {
+       type union {
+         type uint32 {
+           range "1..4294967295";
+         }
+         type enumeration {
+           enum infinity {
+             description
+               "The timer is set to infinity.";
+           }
+           enum not-set {
+             description
+               "The timer is not set.";
+           }
+         }
+       }
+       units "seconds";
+       description
+         "Timer value type, in seconds (32-bit range).";
+     }
+
+     typedef timer-value-milliseconds {
+       type union {
+         type uint32 {
+           range "1..4294967295";
+         }
+         type enumeration {
+           enum infinity {
+             description
+               "The timer is set to infinity.";
+           }
+           enum not-set {
+             description
+               "The timer is not set.";
+           }
+         }
+       }
+       units "milliseconds";
+       description
+         "Timer value type, in milliseconds.";
+     }
+
+     typedef percentage {
+       type uint8 {
+         range "0..100";
+       }
+       description
+         "Integer indicating a percentage value.";
+     }
+
+     typedef timeticks64 {
+       type uint64;
+       description
+         "This type is based on the timeticks type defined in
+          RFC 6991, but with 64-bit width.  It represents the time,
+          modulo 2^64, in hundredths of a second between two epochs.";
+       reference
+         "RFC 6991: Common YANG Data Types.";
+     }
+
+     typedef uint24 {
+       type uint32 {
+         range "0..16777215";
+       }
+       description
+         "24-bit unsigned integer.";
+     }
+
+     /*** Collection of types related to MPLS/GMPLS ***/
+
+     typedef generalized-label {
+       type binary;
+       description
+         "Generalized Label.  Nodes sending and receiving the
+          Generalized Label are aware of the link-specific
+          label context and type.";
+       reference
+         "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+          Signaling Functional Description.  Section 3.2.";
+     }
+
+     typedef mpls-label-special-purpose {
+       type identityref {
+         base mpls-label-special-purpose-value;
+       }
+       description
+         "This type represents the special-purpose MPLS label values.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.
+          RFC 7274: Allocating and Retiring Special-Purpose MPLS
+          Labels.";
+     }
+
+     typedef mpls-label-general-use {
+       type uint32 {
+         range "16..1048575";
+       }
+       description
+         "The 20-bit label value in an MPLS label stack as specified
+          in RFC 3032.  This label value does not include the
+          encodings of Traffic Class and TTL (Time to Live).
+          The label range specified by this type is for general use,
+          with special-purpose MPLS label values excluded.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.";
+     }
+
+     typedef mpls-label {
+       type union {
+         type mpls-label-special-purpose;
+         type mpls-label-general-use;
+       }
+       description
+         "The 20-bit label value in an MPLS label stack as specified
+          in RFC 3032.  This label value does not include the
+          encodings of Traffic Class and TTL.";
+       reference
+         "RFC 3032: MPLS Label Stack Encoding.";
+     }
+
+     /*** Groupings **/
+
+     grouping mpls-label-stack {
+       description
+         "This grouping specifies an MPLS label stack.  The label
+          stack is encoded as a list of label stack entries.  The
+          list key is an identifier that indicates the relative
+          ordering of each entry, with the lowest-value identifier
+          corresponding to the top of the label stack.";
+       container mpls-label-stack {
+         description
+           "Container for a list of MPLS label stack entries.";
+         list entry {
+           key "id";
+           description
+             "List of MPLS label stack entries.";
+           leaf id {
+             type uint8;
+             description
+               "Identifies the entry in a sequence of MPLS label
+                stack entries.  An entry with a smaller identifier
+                value precedes an entry with a larger identifier
+                value in the label stack.  The value of this ID has
+                no semantic meaning other than relative ordering
+                and referencing the entry.";
+           }
+           leaf label {
+             type rt-types:mpls-label;
+             description
+               "Label value.";
+           }
+
+           leaf ttl {
+             type uint8;
+             description
+               "Time to Live (TTL).";
+             reference
+               "RFC 3032: MPLS Label Stack Encoding.";
+           }
+           leaf traffic-class {
+             type uint8 {
+               range "0..7";
+             }
+             description
+               "Traffic Class (TC).";
+             reference
+               "RFC 5462: Multiprotocol Label Switching (MPLS) Label
+                Stack Entry: 'EXP' Field Renamed to 'Traffic Class'
+                Field.";
+           }
+         }
+       }
+     }
+
+     grouping vpn-route-targets {
+       description
+         "A grouping that specifies Route Target import-export rules
+          used in BGP-enabled VPNs.";
+       reference
+         "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).
+          RFC 4664: Framework for Layer 2 Virtual Private Networks
+          (L2VPNs).";
+       list vpn-target {
+         key "route-target";
+         description
+           "List of Route Targets.";
+         leaf route-target {
+           type rt-types:route-target;
+           description
+             "Route Target value.";
+         }
+         leaf route-target-type {
+           type rt-types:route-target-type;
+           mandatory true;
+           description
+             "Import/export type of the Route Target.";
+         }
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-sap-ntw@2023-06-20.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-sap-ntw@2023-06-20.yang
new file mode 100644
index 0000000000000000000000000000000000000000..a78e55c4c0958b574f193d11697b9e946be8e302
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-sap-ntw@2023-06-20.yang
@@ -0,0 +1,350 @@
+module ietf-sap-ntw {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-sap-ntw";
+  prefix sap;
+
+  import ietf-network-topology {
+    prefix nt;
+    reference
+      "RFC 8345: A YANG Data Model for Network
+                 Topologies, Section 6.2";
+  }
+  import ietf-network {
+    prefix nw;
+    reference
+      "RFC 8345: A YANG Data Model for Network
+                 Topologies, Section 6.1";
+  }
+  import ietf-vpn-common {
+    prefix vpn-common;
+    reference
+      "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
+                 VPNs";
+  }
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types, Section 3";
+  }
+
+  organization
+    "IETF OPSA (Operations and Management Area) Working Group";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
+     WG List:  <mailto:opsawg@ietf.org>
+
+     Editor:   Mohamed Boucadair
+               <mailto:mohamed.boucadair@orange.com>
+
+     Author:   Oscar Gonzalez de Dios
+               <mailto:oscar.gonzalezdedios@telefonica.com>
+
+     Author:   Samier Barguil
+               <mailto:samier.barguil_giraldo@nokia.com>
+
+     Author:   Qin Wu
+               <mailto:bill.wu@huawei.com>
+
+     Author:   Victor Lopez
+               <mailto:victor.lopez@nokia.com>";
+  description
+    "This YANG module defines a model for representing, managing,
+     and controlling the Service Attachment Points (SAPs) in the
+     network topology.
+
+     Copyright (c) 2023 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Revised BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 9408; see the
+     RFC itself for full legal notices.";
+
+  revision 2023-06-20 {
+    description
+      "Initial version.";
+    reference
+      "RFC 9408: A YANG Network Data Model for Service Attachment
+                 Points (SAPs)";
+  }
+
+  identity virtual-network {
+    base vpn-common:service-type;
+    description
+      "Virtual network.  Refers to a logical network instance
+       that is built over a physical network.";
+    reference
+      "RFC 8453: Framework for Abstraction and Control of TE
+                 Networks (ACTN)";
+  }
+
+  identity enhanced-vpn {
+    base vpn-common:service-type;
+    description
+      "Enhanced VPN (VPN+).  VPN+ is an approach that is
+       based on existing VPN and Traffic Engineering (TE)
+       technologies but adds characteristics that specific
+       services require over and above conventional VPNs.";
+    reference
+      "draft-ietf-teas-enhanced-vpn:
+         A Framework for Enhanced Virtual Private Network
+         (VPN+)";
+  }
+
+  identity network-slice {
+    base vpn-common:service-type;
+    description
+      "IETF Network Slice.  An IETF Network Slice
+       is a logical network topology connecting a number of
+       endpoints using a set of shared or dedicated network
+       resources that are used to satisfy specific service
+       objectives.";
+    reference
+      "draft-ietf-teas-ietf-network-slices:
+         A Framework for IETF Network Slices";
+  }
+
+  identity sdwan {
+    base vpn-common:service-type;
+    description
+      "PE-based Software-Defined Wide-Area Network (SD-WAN).";
+    reference
+      "draft-ietf-bess-bgp-sdwan-usage:
+         BGP Usage for SD-WAN Overlay Networks";
+  }
+
+  identity basic-connectivity {
+    base vpn-common:service-type;
+    description
+      "Basic IP connectivity.  This is, for example, a plain
+       form of connectivity offered to enterprises over a
+       dedicated or shared MPLS infrastructure.";
+  }
+
+  identity interface-role {
+    description
+      "Base identity for the network role of an interface.";
+  }
+
+  identity uni {
+    base interface-role;
+    description
+      "User-to-Network Interface (UNI).";
+  }
+
+  identity nni {
+    base interface-role;
+    description
+      "Network-to-Network Interface (NNI).";
+  }
+
+  identity interface-type {
+    description
+      "Base identity for the interface type.";
+  }
+
+  identity phy {
+    base interface-type;
+    description
+      "Physical port.";
+  }
+
+  identity loopback {
+    base interface-type;
+    description
+      "Loopback interface.";
+  }
+
+  identity lag {
+    base interface-type;
+    description
+      "Link Aggregation Group (LAG) interface.";
+  }
+
+  identity irb {
+    base interface-type;
+    description
+      "Integrated Routing and Bridging (IRB) interface.  An IRB
+       interface typically connects an IP Virtual Routing and
+       Forwarding (IP-VRF) entity to a bridge domain.";
+  }
+
+  identity local-bridge {
+    base interface-type;
+    description
+      "A local bridge reference to accommodate (for example)
+       implementations that require internal bridging.
+       When such a type is used, a reference to a local
+       bridge domain is used to identify the interface.";
+  }
+
+  identity logical {
+    base interface-type;
+    description
+      "Refers to a logical sub-interface that is typically
+       used to bind a service.  This type is used only
+       if none of the other more specific types (i.e.,
+       'loopback', 'lag', 'irb', or 'local-bridge') can be used.";
+  }
+
+  grouping sap-entry {
+    description
+      "Service Attachment Point (SAP) entry information.";
+    leaf sap-id {
+      type string;
+      description
+        "Indicates an identifier that uniquely identifies
+         a SAP.";
+    }
+    leaf description {
+      type string;
+      description
+        "A textual description of the SAP.";
+    }
+    leaf parent-termination-point {
+      type nt:tp-id;
+      description
+        "Indicates the parent termination point to
+         which the SAP is attached.  A termination
+         point can be a physical port, an interface, etc.";
+    }
+    leaf attachment-interface {
+      type string;
+      description
+        "Indicates the interface to which the SAP is bound.";
+    }
+    leaf interface-type {
+      type identityref {
+        base interface-type;
+      }
+      description
+        "The type of the interface to which the SAP is bound.";
+    }
+    leaf encapsulation-type {
+      type identityref {
+        base vpn-common:encapsulation-type;
+      }
+      description
+        "Encapsulation type of the interface to which the
+         SAP is bound.";
+    }
+    leaf role {
+      type identityref {
+        base interface-role;
+      }
+      description
+        "Indicates the role of a SAP.";
+    }
+    leaf allows-child-saps {
+      type boolean;
+      description
+        "Indicates whether the attachment interface of this
+         SAP is capable of hosting per-service sub-interfaces.";
+    }
+    leaf-list peer-sap-id {
+      type string;
+      description
+        "Indicates an identifier of the peer's termination
+         identifier (e.g., a Customer Edge (CE)).  This
+         information can be used for correlation purposes,
+         such as identifying the SAP that is attached to
+         an endpoint that is provided in a service request.";
+    }
+  }
+
+  grouping sap-list {
+    description
+      "SAP information.";
+    list sap {
+      key "sap-id";
+      description
+        "The SAPs are an abstraction of the points to which
+         network services such as L3VPNs, L2VPNs, or network
+         slices can be attached.";
+      uses sap-entry;
+      container sap-status {
+        config false;
+        description
+          "Indicates the operational status of the SAP,
+           independent of any service provisioned over it.";
+
+        uses vpn-common:oper-status-timestamp;
+      }
+      container service-status {
+        description
+          "Indicates the service status.";
+        container admin-status {
+          description
+            "Administrative service status.";
+          leaf status {
+            type identityref {
+              base vpn-common:administrative-status;
+            }
+            description
+              "Administrative status of the service provisioned
+               at the SAP.";
+          }
+          leaf last-change {
+            type yang:date-and-time;
+            description
+              "Indicates the actual date and time of the service
+               status change.";
+          }
+        }
+        container oper-status {
+          config false;
+          description
+            "Operational status of the service provisioned
+             at the SAP.";
+          uses vpn-common:oper-status-timestamp;
+        }
+      }
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:network-types" {
+    description
+      "Introduces a new network type for a SAP network.";
+    container sap-network {
+      presence "Indicates the SAP network type.";
+      description
+        "The presence of the container node indicates the
+         SAP network type.";
+      leaf-list service-type {
+        type identityref {
+          base vpn-common:service-type;
+        }
+        description
+          "Indicates the set of supported service types.";
+      }
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:node" {
+    when '../nw:network-types/sap:sap-network' {
+      description
+        "Augmentation parameters apply only for SAP
+         networks.";
+    }
+    description
+      "SAP parameters for the node level.";
+    list service {
+      key "service-type";
+      description
+        "A list of supported service types for the node.";
+      leaf service-type {
+        type identityref {
+          base vpn-common:service-type;
+        }
+        description
+          "Indicates a service type.";
+      }
+      uses sap-list;
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-packet-types@2020-06-10.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-packet-types@2020-06-10.yang
new file mode 100644
index 0000000000000000000000000000000000000000..8e7d4aafadcc34ec21dbf553d72852dc64624c4a
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-packet-types@2020-06-10.yang
@@ -0,0 +1,475 @@
+module ietf-te-packet-types {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-te-packet-types";
+  prefix te-packet-types;
+
+  /* Import TE generic types */
+
+  import ietf-te-types {
+    prefix te-types;
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering";
+  }
+
+  organization
+    "IETF Traffic Engineering Architecture and Signaling (TEAS)
+     Working Group";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/teas/>
+     WG List:  <mailto:teas@ietf.org>
+
+     Editor:   Tarek Saad
+               <mailto:tsaad@juniper.net>
+
+     Editor:   Rakesh Gandhi
+               <mailto:rgandhi@cisco.com>
+
+     Editor:   Vishnu Pavan Beeram
+               <mailto:vbeeram@juniper.net>
+
+     Editor:   Xufeng Liu
+               <mailto:xufeng.liu.ietf@gmail.com>
+
+     Editor:   Igor Bryskin
+               <mailto:i_bryskin@yahoo.com>";
+  description
+    "This YANG module contains a collection of generally useful YANG
+     data type definitions specific to MPLS TE.  The model fully
+     conforms to the Network Management Datastore Architecture
+     (NMDA).
+
+     Copyright (c) 2020 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Simplified BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8776; see the
+     RFC itself for full legal notices.";
+
+  revision 2020-06-10 {
+    description
+      "Latest revision of TE MPLS types.";
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering";
+  }
+
+  /**
+   * Typedefs
+   */
+
+  typedef te-bandwidth-requested-type {
+    type enumeration {
+      enum specified {
+        description
+          "Bandwidth is explicitly specified.";
+      }
+      enum auto {
+        description
+          "Bandwidth is automatically computed.";
+      }
+    }
+    description
+      "Enumerated type for specifying whether bandwidth is
+       explicitly specified or automatically computed.";
+  }
+
+  typedef te-class-type {
+    type uint8;
+    description
+      "Diffserv-TE Class-Type.  Defines a set of Traffic Trunks
+       crossing a link that is governed by a specific set of
+       bandwidth constraints.  Class-Type is used for the purposes
+       of link bandwidth allocation, constraint-based routing, and
+       admission control.";
+    reference
+      "RFC 4124: Protocol Extensions for Support of Diffserv-aware
+       MPLS Traffic Engineering";
+  }
+
+  typedef bc-type {
+    type uint8 {
+      range "0..7";
+    }
+    description
+      "Diffserv-TE bandwidth constraints as defined in RFC 4124.";
+    reference
+      "RFC 4124: Protocol Extensions for Support of Diffserv-aware
+       MPLS Traffic Engineering";
+  }
+
+  typedef bandwidth-kbps {
+    type uint64;
+    units "Kbps";
+    description
+      "Bandwidth values, expressed in kilobits per second.";
+  }
+
+  typedef bandwidth-mbps {
+    type uint64;
+    units "Mbps";
+    description
+      "Bandwidth values, expressed in megabits per second.";
+  }
+
+  typedef bandwidth-gbps {
+    type uint64;
+    units "Gbps";
+    description
+      "Bandwidth values, expressed in gigabits per second.";
+  }
+
+  identity backup-protection-type {
+    description
+      "Base identity for the backup protection type.";
+  }
+
+  identity backup-protection-link {
+    base backup-protection-type;
+    description
+      "Backup provides link protection only.";
+  }
+
+  identity backup-protection-node-link {
+    base backup-protection-type;
+    description
+      "Backup offers node (preferred) or link protection.";
+  }
+
+  identity bc-model-type {
+    description
+      "Base identity for the Diffserv-TE Bandwidth Constraints
+       Model type.";
+    reference
+      "RFC 4124: Protocol Extensions for Support of Diffserv-aware
+       MPLS Traffic Engineering";
+  }
+
+  identity bc-model-rdm {
+    base bc-model-type;
+    description
+      "Russian Dolls Bandwidth Constraints Model type.";
+    reference
+      "RFC 4127: Russian Dolls Bandwidth Constraints Model for
+                 Diffserv-aware MPLS Traffic Engineering";
+  }
+
+  identity bc-model-mam {
+    base bc-model-type;
+    description
+      "Maximum Allocation Bandwidth Constraints Model type.";
+    reference
+      "RFC 4125: Maximum Allocation Bandwidth Constraints Model for
+                 Diffserv-aware MPLS Traffic Engineering";
+  }
+
+  identity bc-model-mar {
+    base bc-model-type;
+    description
+      "Maximum Allocation with Reservation Bandwidth Constraints
+       Model type.";
+    reference
+      "RFC 4126: Max Allocation with Reservation Bandwidth
+       Constraints Model for Diffserv-aware MPLS Traffic Engineering
+       & Performance Comparisons";
+  }
+
+  grouping performance-metrics-attributes-packet {
+    description
+      "Contains PM attributes.";
+    uses te-types:performance-metrics-attributes {
+      augment "performance-metrics-one-way" {
+        leaf one-way-min-delay {
+          type uint32 {
+            range "0..16777215";
+          }
+          description
+            "One-way minimum delay or latency in microseconds.";
+        }
+        leaf one-way-min-delay-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "One-way minimum delay or latency normality.";
+        }
+        leaf one-way-max-delay {
+          type uint32 {
+            range "0..16777215";
+          }
+          description
+            "One-way maximum delay or latency in microseconds.";
+        }
+        leaf one-way-max-delay-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "One-way maximum delay or latency normality.";
+        }
+        leaf one-way-delay-variation {
+          type uint32 {
+            range "0..16777215";
+          }
+          description
+            "One-way delay variation in microseconds.";
+          reference
+            "RFC 5481: Packet Delay Variation Applicability
+             Statement, Section 4.2";
+        }
+        leaf one-way-delay-variation-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "One-way delay variation normality.";
+          reference
+            "RFC 7471: OSPF Traffic Engineering (TE) Metric
+             Extensions
+             RFC 7823: Performance-Based Path Selection for
+             Explicitly Routed Label Switched Paths (LSPs) Using
+             TE Metric Extensions
+             RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions";
+        }
+        leaf one-way-packet-loss {
+          type decimal64 {
+            fraction-digits 6;
+            range "0..50.331642";
+          }
+          description
+            "One-way packet loss as a percentage of the total traffic
+             sent over a configurable interval.  The finest precision
+             is 0.000003%, where the maximum is 50.331642%.";
+          reference
+            "RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions, Section 4.4";
+        }
+        leaf one-way-packet-loss-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "Packet loss normality.";
+          reference
+            "RFC 7471: OSPF Traffic Engineering (TE) Metric
+             Extensions
+             RFC 7823: Performance-Based Path Selection for
+             Explicitly Routed Label Switched Paths (LSPs) Using
+             TE Metric Extensions
+             RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions";
+        }
+        description
+          "PM one-way packet-specific augmentation for a generic PM
+           grouping.";
+      }
+      augment "performance-metrics-two-way" {
+        leaf two-way-min-delay {
+          type uint32 {
+            range "0..16777215";
+          }
+          default "0";
+          description
+            "Two-way minimum delay or latency in microseconds.";
+        }
+        leaf two-way-min-delay-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "Two-way minimum delay or latency normality.";
+          reference
+            "RFC 7471: OSPF Traffic Engineering (TE) Metric
+             Extensions
+             RFC 7823: Performance-Based Path Selection for
+             Explicitly Routed Label Switched Paths (LSPs) Using
+             TE Metric Extensions
+             RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions";
+        }
+        leaf two-way-max-delay {
+          type uint32 {
+            range "0..16777215";
+          }
+          default "0";
+          description
+            "Two-way maximum delay or latency in microseconds.";
+        }
+        leaf two-way-max-delay-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "Two-way maximum delay or latency normality.";
+          reference
+            "RFC 7471: OSPF Traffic Engineering (TE) Metric
+             Extensions
+             RFC 7823: Performance-Based Path Selection for
+             Explicitly Routed Label Switched Paths (LSPs) Using
+             TE Metric Extensions
+             RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions";
+        }
+        leaf two-way-delay-variation {
+          type uint32 {
+            range "0..16777215";
+          }
+          default "0";
+          description
+            "Two-way delay variation in microseconds.";
+          reference
+            "RFC 5481: Packet Delay Variation Applicability
+             Statement, Section 4.2";
+        }
+        leaf two-way-delay-variation-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "Two-way delay variation normality.";
+          reference
+            "RFC 7471: OSPF Traffic Engineering (TE) Metric
+             Extensions
+             RFC 7823: Performance-Based Path Selection for
+             Explicitly Routed Label Switched Paths (LSPs) Using
+             TE Metric Extensions
+             RFC 8570: IS-IS Traffic Engineering (TE) Metric
+             Extensions";
+        }
+        leaf two-way-packet-loss {
+          type decimal64 {
+            fraction-digits 6;
+            range "0..50.331642";
+          }
+          default "0";
+          description
+            "Two-way packet loss as a percentage of the total traffic
+             sent over a configurable interval.  The finest precision
+             is 0.000003%.";
+        }
+        leaf two-way-packet-loss-normality {
+          type te-types:performance-metrics-normality;
+          default "normal";
+          description
+            "Two-way packet loss normality.";
+        }
+        description
+          "PM two-way packet-specific augmentation for a generic PM
+           grouping.";
+        reference
+          "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+           RFC 7823: Performance-Based Path Selection for
+           Explicitly Routed Label Switched Paths (LSPs) Using
+           TE Metric Extensions
+           RFC 8570: IS-IS Traffic Engineering (TE) Metric
+           Extensions";
+      }
+    }
+  }
+
+  grouping one-way-performance-metrics-packet {
+    description
+      "One-way packet PM throttle grouping.";
+    leaf one-way-min-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "One-way minimum delay or latency in microseconds.";
+    }
+    leaf one-way-max-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "One-way maximum delay or latency in microseconds.";
+    }
+    leaf one-way-delay-variation {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "One-way delay variation in microseconds.";
+    }
+    leaf one-way-packet-loss {
+      type decimal64 {
+        fraction-digits 6;
+        range "0..50.331642";
+      }
+      default "0";
+      description
+        "One-way packet loss as a percentage of the total traffic
+         sent over a configurable interval.  The finest precision is
+         0.000003%.";
+    }
+  }
+
+  grouping two-way-performance-metrics-packet {
+    description
+      "Two-way packet PM throttle grouping.";
+    leaf two-way-min-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "Two-way minimum delay or latency in microseconds.";
+    }
+    leaf two-way-max-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "Two-way maximum delay or latency in microseconds.";
+    }
+    leaf two-way-delay-variation {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "Two-way delay variation in microseconds.";
+    }
+    leaf two-way-packet-loss {
+      type decimal64 {
+        fraction-digits 6;
+        range "0..50.331642";
+      }
+      default "0";
+      description
+        "Two-way packet loss as a percentage of the total traffic
+         sent over a configurable interval.  The finest precision is
+         0.000003%.";
+    }
+  }
+
+  grouping performance-metrics-throttle-container-packet {
+    description
+      "Packet PM threshold grouping.";
+    uses te-types:performance-metrics-throttle-container {
+      augment "throttle/threshold-out" {
+        uses one-way-performance-metrics-packet;
+        uses two-way-performance-metrics-packet;
+        description
+          "PM threshold-out packet augmentation for a
+           generic grouping.";
+      }
+      augment "throttle/threshold-in" {
+        uses one-way-performance-metrics-packet;
+        uses two-way-performance-metrics-packet;
+        description
+          "PM threshold-in packet augmentation for a
+           generic grouping.";
+      }
+      augment "throttle/threshold-accelerated-advertisement" {
+        uses one-way-performance-metrics-packet;
+        uses two-way-performance-metrics-packet;
+        description
+          "PM accelerated advertisement packet augmentation for a
+           generic grouping.";
+      }
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-topology@2020-08-06.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-topology@2020-08-06.yang
new file mode 100644
index 0000000000000000000000000000000000000000..6d76a77b21ba5609094a670290e5bd81562c3022
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-topology@2020-08-06.yang
@@ -0,0 +1,1952 @@
+module ietf-te-topology {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology";
+  prefix tet;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  import ietf-te-types {
+    prefix te-types;
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering";
+  }
+  import ietf-network {
+    prefix nw;
+    reference
+      "RFC 8345: A YANG Data Model for Network Topologies";
+  }
+  import ietf-network-topology {
+    prefix nt;
+    reference
+      "RFC 8345: A YANG Data Model for Network Topologies";
+  }
+
+  organization
+    "IETF Traffic Engineering Architecture and Signaling (TEAS)
+     Working Group";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/teas/>
+     WG List:  <mailto:teas@ietf.org>
+
+     Editor:   Xufeng Liu
+               <mailto:xufeng.liu.ietf@gmail.com>
+
+     Editor:   Igor Bryskin
+               <mailto:i_bryskin@yahoo.com>
+
+     Editor:   Vishnu Pavan Beeram
+               <mailto:vbeeram@juniper.net>
+
+     Editor:   Tarek Saad
+               <mailto:tsaad@juniper.net>
+
+     Editor:   Himanshu Shah
+               <mailto:hshah@ciena.com>
+
+     Editor:   Oscar Gonzalez de Dios
+               <mailto:oscar.gonzalezdedios@telefonica.com>";
+  description
+    "This YANG module defines a TE topology model for representing,
+     retrieving, and manipulating technology-agnostic TE topologies.
+
+     Copyright (c) 2020 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Simplified BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8795; see the
+     RFC itself for full legal notices.";
+
+  revision 2020-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8795: YANG Data Model for Traffic Engineering (TE)
+       Topologies";
+  }
+
+  /*
+   * Features
+   */
+
+  feature nsrlg {
+    description
+      "This feature indicates that the system supports NSRLGs
+       (Non-Shared Risk Link Groups).";
+  }
+
+  feature te-topology-hierarchy {
+    description
+      "This feature indicates that the system allows an underlay
+       and/or overlay TE topology hierarchy.";
+  }
+
+  feature template {
+    description
+      "This feature indicates that the system supports
+       template configuration.";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef geographic-coordinate-degree {
+    type decimal64 {
+      fraction-digits 8;
+    }
+    description
+      "Decimal degree (DD) used to express latitude and longitude
+       geographic coordinates.";
+  }
+  // geographic-coordinate-degree
+
+  typedef te-info-source {
+    type enumeration {
+      enum unknown {
+        description
+          "The source is unknown.";
+      }
+      enum locally-configured {
+        description
+          "Configured entity.";
+      }
+      enum ospfv2 {
+        description
+          "OSPFv2.";
+      }
+      enum ospfv3 {
+        description
+          "OSPFv3.";
+      }
+      enum isis {
+        description
+          "IS-IS.";
+      }
+      enum bgp-ls {
+        description
+          "BGP-LS.";
+        reference
+          "RFC 7752: North-Bound Distribution of Link-State and
+           Traffic Engineering (TE) Information Using BGP";
+      }
+      enum system-processed {
+        description
+          "System-processed entity.";
+      }
+      enum other {
+        description
+          "Other source.";
+      }
+    }
+    description
+      "Describes the type of source that has provided the
+       related information, and the source's credibility.";
+  }
+  // te-info-source
+
+  /*
+   * Groupings
+   */
+
+  grouping connectivity-matrix-entry-path-attributes {
+    description
+      "Attributes of a connectivity matrix entry.";
+    leaf is-allowed {
+      type boolean;
+      description
+        "'true' - switching is allowed;
+         'false' - switching is disallowed.";
+    }
+    container underlay {
+      if-feature "te-topology-hierarchy";
+      description
+        "Attributes of the TE link underlay.";
+      reference
+        "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+         Generalized Multi-Protocol Label Switching (GMPLS)
+         Traffic Engineering (TE)";
+      uses te-link-underlay-attributes;
+    }
+    uses te-types:generic-path-constraints;
+    uses te-types:generic-path-optimization;
+    uses te-types:generic-path-properties;
+  }
+  // connectivity-matrix-entry-path-attributes
+
+  grouping geolocation-container {
+    description
+      "Contains a GPS location.";
+    container geolocation {
+      config false;
+      description
+        "Contains a GPS location.";
+      leaf altitude {
+        type int64;
+        units "millimeters";
+        description
+          "Distance above sea level.";
+      }
+      leaf latitude {
+        type geographic-coordinate-degree {
+          range "-90..90";
+        }
+        description
+          "Relative position north or south on the Earth's surface.";
+      }
+      leaf longitude {
+        type geographic-coordinate-degree {
+          range "-180..180";
+        }
+        description
+          "Angular distance east or west on the Earth's surface.";
+      }
+    }
+    // geolocation
+  }
+  // geolocation-container
+
+  grouping information-source-state-attributes {
+    description
+      "The attributes identifying the source that has provided the
+       related information, and the source's credibility.";
+    leaf credibility-preference {
+      type uint16;
+      description
+        "The preference value for calculating the Traffic
+         Engineering database credibility value used for
+         tie-break selection between different information-source
+         values.  A higher value is preferable.";
+    }
+    leaf logical-network-element {
+      type string;
+      description
+        "When applicable, this is the name of a logical network
+         element from which the information is learned.";
+    }
+    leaf network-instance {
+      type string;
+      description
+        "When applicable, this is the name of a network instance
+         from which the information is learned.";
+    }
+  }
+  // information-source-state-attributes
+
+  grouping information-source-per-link-attributes {
+    description
+      "Per-node container of the attributes identifying the source
+       that has provided the related information, and the source's
+       credibility.";
+    leaf information-source {
+      type te-info-source;
+      config false;
+      description
+        "Indicates the type of information source.";
+    }
+    leaf information-source-instance {
+      type string;
+      config false;
+      description
+        "The name indicating the instance of the information
+         source.";
+    }
+    container information-source-state {
+      config false;
+      description
+        "Contains state attributes related to the information
+         source.";
+      uses information-source-state-attributes;
+      container topology {
+        description
+          "When the information is processed by the system,
+           the attributes in this container indicate which topology
+           is used to generate the result information.";
+        uses nt:link-ref;
+      }
+    }
+  }
+  // information-source-per-link-attributes
+
+  grouping information-source-per-node-attributes {
+    description
+      "Per-node container of the attributes identifying the source
+       that has provided the related information, and the source's
+       credibility.";
+    leaf information-source {
+      type te-info-source;
+      config false;
+      description
+        "Indicates the type of information source.";
+    }
+    leaf information-source-instance {
+      type string;
+      config false;
+      description
+        "The name indicating the instance of the information
+         source.";
+    }
+    container information-source-state {
+      config false;
+      description
+        "Contains state attributes related to the information
+         source.";
+      uses information-source-state-attributes;
+      container topology {
+        description
+          "When the information is processed by the system,
+           the attributes in this container indicate which topology
+           is used to generate the result information.";
+        uses nw:node-ref;
+      }
+    }
+  }
+  // information-source-per-node-attributes
+
+  grouping interface-switching-capability-list {
+    description
+      "List of Interface Switching Capability Descriptors (ISCDs).";
+    list interface-switching-capability {
+      key "switching-capability encoding";
+      description
+        "List of ISCDs for this link.";
+      reference
+        "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+         Signaling Functional Description
+         RFC 4203: OSPF Extensions in Support of Generalized
+         Multi-Protocol Label Switching (GMPLS)";
+      leaf switching-capability {
+        type identityref {
+          base te-types:switching-capabilities;
+        }
+        description
+          "Switching capability for this interface.";
+      }
+      leaf encoding {
+        type identityref {
+          base te-types:lsp-encoding-types;
+        }
+        description
+          "Encoding supported by this interface.";
+      }
+      uses te-link-iscd-attributes;
+    }
+    // interface-switching-capability
+  }
+  // interface-switching-capability-list
+
+  grouping statistics-per-link {
+    description
+      "Statistics attributes per TE link.";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      description
+        "The time of the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
+    }
+    /* Administrative attributes */
+    leaf disables {
+      type yang:counter32;
+      description
+        "Number of times that a link was disabled.";
+    }
+    leaf enables {
+      type yang:counter32;
+      description
+        "Number of times that a link was enabled.";
+    }
+    leaf maintenance-clears {
+      type yang:counter32;
+      description
+        "Number of times that a link was taken out of maintenance.";
+    }
+    leaf maintenance-sets {
+      type yang:counter32;
+      description
+        "Number of times that a link was put in maintenance.";
+    }
+    leaf modifies {
+      type yang:counter32;
+      description
+        "Number of times that a link was modified.";
+    }
+    /* Operational attributes */
+    leaf downs {
+      type yang:counter32;
+      description
+        "Number of times that a link was set to an operational state
+         of 'down'.";
+    }
+    leaf ups {
+      type yang:counter32;
+      description
+        "Number of times that a link was set to an operational state
+         of 'up'.";
+    }
+    /* Recovery attributes */
+    leaf fault-clears {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced a fault-clear
+         event.";
+    }
+    leaf fault-detects {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced fault detection.";
+    }
+    leaf protection-switches {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced protection
+         switchover.";
+    }
+    leaf protection-reverts {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced protection
+         reversion.";
+    }
+    leaf restoration-failures {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         failure.";
+    }
+    leaf restoration-starts {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         start.";
+    }
+    leaf restoration-successes {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         success.";
+    }
+    leaf restoration-reversion-failures {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         reversion failure.";
+    }
+    leaf restoration-reversion-starts {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         reversion start.";
+    }
+    leaf restoration-reversion-successes {
+      type yang:counter32;
+      description
+        "Number of times that a link experienced restoration
+         reversion success.";
+    }
+  }
+  // statistics-per-link
+
+  grouping statistics-per-node {
+    description
+      "Statistics attributes per TE node.";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      description
+        "The time of the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
+    }
+    container node {
+      description
+        "Contains statistics attributes at the TE node level.";
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that a node was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that a node was enabled.";
+      }
+      leaf maintenance-sets {
+        type yang:counter32;
+        description
+          "Number of times that a node was put in maintenance.";
+      }
+      leaf maintenance-clears {
+        type yang:counter32;
+        description
+          "Number of times that a node was taken out of
+           maintenance.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that a node was modified.";
+      }
+    }
+    // node
+    container connectivity-matrix-entry {
+      description
+        "Contains statistics attributes at the level of a
+         connectivity matrix entry.";
+      leaf creates {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           created.";
+        reference
+          "RFC 6241: Network Configuration Protocol (NETCONF),
+                     Section 7.2, 'create' operation";
+      }
+      leaf deletes {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           deleted.";
+        reference
+          "RFC 6241: Network Configuration Protocol (NETCONF),
+                     Section 7.2, 'delete' operation";
+      }
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           enabled.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that a connectivity matrix entry was
+           modified.";
+      }
+    }
+    // connectivity-matrix-entry
+  }
+  // statistics-per-node
+
+  grouping statistics-per-ttp {
+    description
+      "Statistics attributes per TE TTP (Tunnel Termination Point).";
+    leaf discontinuity-time {
+      type yang:date-and-time;
+      description
+        "The time of the most recent occasion at which any one or
+         more of this interface's counters suffered a
+         discontinuity.  If no such discontinuities have occurred
+         since the last re-initialization of the local management
+         subsystem, then this node contains the time the local
+         management subsystem re-initialized itself.";
+    }
+    container tunnel-termination-point {
+      description
+        "Contains statistics attributes at the TE TTP level.";
+      /* Administrative attributes */
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was enabled.";
+      }
+      leaf maintenance-clears {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was taken out of maintenance.";
+      }
+      leaf maintenance-sets {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was put in maintenance.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was modified.";
+      }
+      /* Operational attributes */
+      leaf downs {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was set to an operational state
+           of 'down'.";
+      }
+      leaf ups {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was set to an operational state
+           of 'up'.";
+      }
+      leaf in-service-clears {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was taken out of service
+           (TE tunnel was released).";
+      }
+      leaf in-service-sets {
+        type yang:counter32;
+        description
+          "Number of times that a TTP was put in service by a TE
+           tunnel (TE tunnel was set up).";
+      }
+    }
+    // tunnel-termination-point
+    container local-link-connectivity {
+      description
+        "Contains statistics attributes at the TE LLCL (Local Link
+         Connectivity List) level.";
+      leaf creates {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was created.";
+        reference
+          "RFC 6241: Network Configuration Protocol (NETCONF),
+                     Section 7.2, 'create' operation";
+      }
+      leaf deletes {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was deleted.";
+        reference
+          "RFC 6241: Network Configuration Protocol (NETCONF),
+                     Section 7.2, 'delete' operation";
+      }
+      leaf disables {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was disabled.";
+      }
+      leaf enables {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was enabled.";
+      }
+      leaf modifies {
+        type yang:counter32;
+        description
+          "Number of times that an LLCL entry was modified.";
+      }
+    }
+    // local-link-connectivity
+  }
+  // statistics-per-ttp
+
+  grouping te-link-augment {
+    description
+      "Augmentation for a TE link.";
+    uses te-link-config;
+    uses te-link-state-derived;
+    container statistics {
+      config false;
+      description
+        "Statistics data.";
+      uses statistics-per-link;
+    }
+  }
+  // te-link-augment
+
+  grouping te-link-config {
+    description
+      "TE link configuration grouping.";
+    choice bundle-stack-level {
+      description
+        "The TE link can be partitioned into bundled links or
+         component links.";
+      case bundle {
+        container bundled-links {
+          description
+            "A set of bundled links.";
+          reference
+            "RFC 4201: Link Bundling in MPLS Traffic
+             Engineering (TE)";
+          list bundled-link {
+            key "sequence";
+            description
+              "Specifies a bundled interface that is
+               further partitioned.";
+            leaf sequence {
+              type uint32;
+              description
+                "Identifies the sequence in the bundle.";
+            }
+          }
+        }
+      }
+      case component {
+        container component-links {
+          description
+            "A set of component links.";
+          list component-link {
+            key "sequence";
+            description
+              "Specifies a component interface that is
+               sufficient to unambiguously identify the
+               appropriate resources.";
+            leaf sequence {
+              type uint32;
+              description
+                "Identifies the sequence in the bundle.";
+            }
+            leaf src-interface-ref {
+              type string;
+              description
+                "Reference to a component link interface on the
+                 source node.";
+            }
+            leaf des-interface-ref {
+              type string;
+              description
+                "Reference to a component link interface on the
+                 destination node.";
+            }
+          }
+        }
+      }
+    }
+    // bundle-stack-level
+    leaf-list te-link-template {
+      if-feature "template";
+      type leafref {
+        path "../../../../te/templates/link-template/name";
+      }
+      description
+        "The reference to a TE link template.";
+    }
+    uses te-link-config-attributes;
+  }
+  // te-link-config
+
+  grouping te-link-config-attributes {
+    description
+      "Link configuration attributes in a TE topology.";
+    container te-link-attributes {
+      description
+        "Link attributes in a TE topology.";
+      leaf access-type {
+        type te-types:te-link-access-type;
+        description
+          "Link access type, which can be point-to-point or
+           multi-access.";
+      }
+      container external-domain {
+        description
+          "For an inter-domain link, specifies the attributes of
+           the remote end of the link, to facilitate the signaling at
+           the local end.";
+        uses nw:network-ref;
+        leaf remote-te-node-id {
+          type te-types:te-node-id;
+          description
+            "Remote TE node identifier, used together with
+             'remote-te-link-tp-id' to identify the remote Link
+             Termination Point (LTP) in a different domain.";
+        }
+        leaf remote-te-link-tp-id {
+          type te-types:te-tp-id;
+          description
+            "Remote TE LTP identifier, used together with
+             'remote-te-node-id' to identify the remote LTP in a
+             different domain.";
+        }
+      }
+      leaf is-abstract {
+        type empty;
+        description
+          "Present if the link is abstract.";
+      }
+      leaf name {
+        type string;
+        description
+          "Link name.";
+      }
+      container underlay {
+        if-feature "te-topology-hierarchy";
+        description
+          "Attributes of the TE link underlay.";
+        reference
+          "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+           Generalized Multi-Protocol Label Switching (GMPLS)
+           Traffic Engineering (TE)";
+        uses te-link-underlay-attributes;
+      }
+      leaf admin-status {
+        type te-types:te-admin-status;
+        description
+          "The administrative state of the link.";
+      }
+      uses te-link-info-attributes;
+    }
+    // te-link-attributes
+  }
+  // te-link-config-attributes
+
+  grouping te-link-info-attributes {
+    description
+      "Advertised TE information attributes.";
+    leaf link-index {
+      type uint64;
+      description
+        "The link identifier.  If OSPF is used, this object
+         represents an ospfLsdbID.  If IS-IS is used, this object
+         represents an isisLSPID.  If a locally configured link is
+         used, this object represents a unique value, which is
+         locally defined in a router.";
+    }
+    leaf administrative-group {
+      type te-types:admin-groups;
+      description
+        "Administrative group or color of the link.
+         This attribute covers both administrative groups (defined
+         in RFCs 3630 and 5305) and Extended Administrative Groups
+         (defined in RFC 7308).";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2
+         RFC 5305: IS-IS Extensions for Traffic Engineering
+         RFC 7308: Extended Administrative Groups in MPLS Traffic
+         Engineering (MPLS-TE)";
+    }
+    uses interface-switching-capability-list;
+    uses te-types:label-set-info;
+    leaf link-protection-type {
+      type identityref {
+        base te-types:link-protection-type;
+      }
+      description
+        "Link Protection Type desired for this link.";
+      reference
+        "RFC 4202: Routing Extensions in Support of
+         Generalized Multi-Protocol Label Switching (GMPLS)";
+    }
+    container max-link-bandwidth {
+      uses te-types:te-bandwidth;
+      description
+        "Maximum bandwidth that can be seen on this link in this
+         direction.  Units are in bytes per second.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2
+         RFC 5305: IS-IS Extensions for Traffic Engineering";
+    }
+    container max-resv-link-bandwidth {
+      uses te-types:te-bandwidth;
+      description
+        "Maximum amount of bandwidth that can be reserved in this
+         direction in this link.  Units are in bytes per second.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2
+         RFC 5305: IS-IS Extensions for Traffic Engineering";
+    }
+    list unreserved-bandwidth {
+      key "priority";
+      max-elements 8;
+      description
+        "Unreserved bandwidth for priority levels 0-7.  Units are in
+         bytes per second.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2
+         RFC 5305: IS-IS Extensions for Traffic Engineering";
+      leaf priority {
+        type uint8 {
+          range "0..7";
+        }
+        description
+          "Priority.";
+      }
+      uses te-types:te-bandwidth;
+    }
+    leaf te-default-metric {
+      type uint32;
+      description
+        "Traffic Engineering metric.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2
+         RFC 5305: IS-IS Extensions for Traffic Engineering";
+    }
+    leaf te-delay-metric {
+      type uint32;
+      description
+        "Traffic Engineering delay metric.";
+      reference
+        "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+    }
+    leaf te-igp-metric {
+      type uint32;
+      description
+        "IGP metric used for Traffic Engineering.";
+      reference
+        "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+         second MPLS Traffic Engineering (TE) Metric";
+    }
+    container te-srlgs {
+      description
+        "Contains a list of SRLGs.";
+      leaf-list value {
+        type te-types:srlg;
+        description
+          "SRLG value.";
+        reference
+          "RFC 4202: Routing Extensions in Support of
+           Generalized Multi-Protocol Label Switching (GMPLS)";
+      }
+    }
+    container te-nsrlgs {
+      if-feature "nsrlg";
+      description
+        "Contains a list of NSRLGs (Non-Shared Risk Link Groups).
+         When an abstract TE link is configured, this list specifies
+         the request that underlay TE paths need to be mutually
+         disjoint with other TE links in the same groups.";
+      leaf-list id {
+        type uint32;
+        description
+          "NSRLG ID, uniquely configured within a topology.";
+        reference
+          "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+           Generalized Multi-Protocol Label Switching (GMPLS)
+           Recovery";
+      }
+    }
+  }
+  // te-link-info-attributes
+
+  grouping te-link-iscd-attributes {
+    description
+      "TE link ISCD attributes.";
+    reference
+      "RFC 4203: OSPF Extensions in Support of Generalized
+       Multi-Protocol Label Switching (GMPLS), Section 1.4";
+    list max-lsp-bandwidth {
+      key "priority";
+      max-elements 8;
+      description
+        "Maximum Label Switched Path (LSP) bandwidth at
+         priorities 0-7.";
+      leaf priority {
+        type uint8 {
+          range "0..7";
+        }
+        description
+          "Priority.";
+      }
+      uses te-types:te-bandwidth;
+    }
+  }
+  // te-link-iscd-attributes
+
+  grouping te-link-state-derived {
+    description
+      "Link state attributes in a TE topology.";
+    leaf oper-status {
+      type te-types:te-oper-status;
+      config false;
+      description
+        "The current operational state of the link.";
+    }
+    leaf is-transitional {
+      type empty;
+      config false;
+      description
+        "Present if the link is transitional; used as an
+         alternative approach in lieu of 'inter-layer-lock-id'
+         for path computation in a TE topology covering multiple
+         layers or multiple regions.";
+      reference
+        "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+         Multi-Layer Networks (MRN/MLN)
+         RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+         for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+    }
+    uses information-source-per-link-attributes;
+    list information-source-entry {
+      key "information-source information-source-instance";
+      config false;
+      description
+        "A list of information sources learned, including the source
+         that is used.";
+      uses information-source-per-link-attributes;
+      uses te-link-info-attributes;
+    }
+    container recovery {
+      config false;
+      description
+        "Status of the recovery process.";
+      leaf restoration-status {
+        type te-types:te-recovery-status;
+        description
+          "Restoration status.";
+      }
+      leaf protection-status {
+        type te-types:te-recovery-status;
+        description
+          "Protection status.";
+      }
+    }
+    container underlay {
+      if-feature "te-topology-hierarchy";
+      config false;
+      description
+        "State attributes for the TE link underlay.";
+      leaf dynamic {
+        type boolean;
+        description
+          "'true' if the underlay is dynamically created.";
+      }
+      leaf committed {
+        type boolean;
+        description
+          "'true' if the underlay is committed.";
+      }
+    }
+  }
+  // te-link-state-derived
+
+  grouping te-link-underlay-attributes {
+    description
+      "Attributes for the TE link underlay.";
+    reference
+      "RFC 4206: Label Switched Paths (LSP) Hierarchy with
+       Generalized Multi-Protocol Label Switching (GMPLS)
+       Traffic Engineering (TE)";
+    leaf enabled {
+      type boolean;
+      description
+        "'true' if the underlay is enabled.
+         'false' if the underlay is disabled.";
+    }
+    container primary-path {
+      description
+        "The service path on the underlay topology that
+         supports this link.";
+      uses nw:network-ref;
+      list path-element {
+        key "path-element-id";
+        description
+          "A list of path elements describing the service path.";
+        leaf path-element-id {
+          type uint32;
+          description
+            "To identify the element in a path.";
+        }
+        uses te-path-element;
+      }
+    }
+    // primary-path
+    list backup-path {
+      key "index";
+      description
+        "A list of backup service paths on the underlay topology that
+         protect the underlay primary path.  If the primary path is
+         not protected, the list contains zero elements.  If the
+         primary path is protected, the list contains one or more
+         elements.";
+      leaf index {
+        type uint32;
+        description
+          "A sequence number to identify a backup path.";
+      }
+      uses nw:network-ref;
+      list path-element {
+        key "path-element-id";
+        description
+          "A list of path elements describing the backup service
+           path.";
+        leaf path-element-id {
+          type uint32;
+          description
+            "To identify the element in a path.";
+        }
+        uses te-path-element;
+      }
+    }
+    // backup-path
+    leaf protection-type {
+      type identityref {
+        base te-types:lsp-protection-type;
+      }
+      description
+        "Underlay protection type desired for this link.";
+    }
+    container tunnel-termination-points {
+      description
+        "Underlay TTPs desired for this link.";
+      leaf source {
+        type binary;
+        description
+          "Source TTP identifier.";
+      }
+      leaf destination {
+        type binary;
+        description
+          "Destination TTP identifier.";
+      }
+    }
+    container tunnels {
+      description
+        "Underlay TE tunnels supporting this TE link.";
+      leaf sharing {
+        type boolean;
+        default "true";
+        description
+          "'true' if the underlay tunnel can be shared with other
+           TE links;
+           'false' if the underlay tunnel is dedicated to this
+           TE link.
+           This leaf is the default option for all TE tunnels
+           and may be overridden by the per-TE-tunnel value.";
+      }
+      list tunnel {
+        key "tunnel-name";
+        description
+          "Zero, one, or more underlay TE tunnels that support this
+           TE link.";
+        leaf tunnel-name {
+          type string;
+          description
+            "A tunnel name uniquely identifies an underlay TE tunnel,
+             used together with the 'source-node' value for this
+             link.";
+          reference
+            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+        }
+        leaf sharing {
+          type boolean;
+          description
+            "'true' if the underlay tunnel can be shared with other
+             TE links;
+             'false' if the underlay tunnel is dedicated to this
+             TE link.";
+        }
+      }
+      // tunnel
+    }
+    // tunnels
+  }
+  // te-link-underlay-attributes
+
+  grouping te-node-augment {
+    description
+      "Augmentation for a TE node.";
+    uses te-node-config;
+    uses te-node-state-derived;
+    container statistics {
+      config false;
+      description
+        "Statistics data.";
+      uses statistics-per-node;
+    }
+    list tunnel-termination-point {
+      key "tunnel-tp-id";
+      description
+        "A termination point can terminate a tunnel.";
+      leaf tunnel-tp-id {
+        type binary;
+        description
+          "TTP identifier.";
+      }
+      uses te-node-tunnel-termination-point-config;
+      leaf oper-status {
+        type te-types:te-oper-status;
+        config false;
+        description
+          "The current operational state of the TTP.";
+      }
+      uses geolocation-container;
+      container statistics {
+        config false;
+        description
+          "Statistics data.";
+        uses statistics-per-ttp;
+      }
+      // Relationship to other TTPs
+      list supporting-tunnel-termination-point {
+        key "node-ref tunnel-tp-ref";
+        description
+          "Identifies the TTPs on which this TTP depends.";
+        leaf node-ref {
+          type inet:uri;
+          description
+            "This leaf identifies the node in which the supporting
+             TTP is present.
+             This node is either the supporting node or a node in
+             an underlay topology.";
+        }
+        leaf tunnel-tp-ref {
+          type binary;
+          description
+            "Reference to a TTP that is in either the supporting node
+             or a node in an underlay topology.";
+        }
+      }
+      // supporting-tunnel-termination-point
+    }
+    // tunnel-termination-point
+  }
+  // te-node-augment
+
+  grouping te-node-config {
+    description
+      "TE node configuration grouping.";
+    leaf-list te-node-template {
+      if-feature "template";
+      type leafref {
+        path "../../../../te/templates/node-template/name";
+      }
+      description
+        "The reference to a TE node template.";
+    }
+    uses te-node-config-attributes;
+  }
+  // te-node-config
+
+  grouping te-node-config-attributes {
+    description
+      "Configuration node attributes in a TE topology.";
+    container te-node-attributes {
+      description
+        "Contains node attributes in a TE topology.";
+      leaf admin-status {
+        type te-types:te-admin-status;
+        description
+          "The administrative state of the link.";
+      }
+      uses te-node-connectivity-matrices;
+      uses te-node-info-attributes;
+    }
+  }
+  // te-node-config-attributes
+
+  grouping te-node-config-attributes-template {
+    description
+      "Configuration node attributes for a template in a TE
+       topology.";
+    container te-node-attributes {
+      description
+        "Contains node attributes in a TE topology.";
+      leaf admin-status {
+        type te-types:te-admin-status;
+        description
+          "The administrative state of the link.";
+      }
+      uses te-node-info-attributes;
+    }
+  }
+  // te-node-config-attributes-template
+
+  grouping te-node-connectivity-matrices {
+    description
+      "Connectivity matrix on a TE node.";
+    container connectivity-matrices {
+      description
+        "Contains a connectivity matrix on a TE node.";
+      leaf number-of-entries {
+        type uint16;
+        description
+          "The number of connectivity matrix entries.
+           If this number is specified in the configuration request,
+           the number is the requested number of entries, which may
+           not all be listed in the list;
+           if this number is reported in the state data,
+           the number is the current number of operational entries.";
+      }
+      uses te-types:label-set-info;
+      uses connectivity-matrix-entry-path-attributes;
+      list connectivity-matrix {
+        key "id";
+        description
+          "Represents a node's switching limitations, i.e.,
+           limitations in the interconnecting network TE links
+           across the node.";
+        reference
+          "RFC 7579: General Network Element Constraint Encoding
+           for GMPLS-Controlled Networks";
+        leaf id {
+          type uint32;
+          description
+            "Identifies the connectivity matrix entry.";
+        }
+      }
+      // connectivity-matrix
+    }
+    // connectivity-matrices
+  }
+  // te-node-connectivity-matrices
+
+  grouping te-node-connectivity-matrix-attributes {
+    description
+      "Termination point references of a connectivity matrix entry.";
+    container from {
+      description
+        "Reference to a source LTP.";
+      leaf tp-ref {
+        type leafref {
+          path "../../../../../../nt:termination-point/nt:tp-id";
+        }
+        description
+          "Relative reference to a termination point.";
+      }
+      uses te-types:label-set-info;
+    }
+    container to {
+      description
+        "Reference to a destination LTP.";
+      leaf tp-ref {
+        type leafref {
+          path "../../../../../../nt:termination-point/nt:tp-id";
+        }
+        description
+          "Relative reference to a termination point.";
+      }
+      uses te-types:label-set-info;
+    }
+    uses connectivity-matrix-entry-path-attributes;
+  }
+  // te-node-connectivity-matrix-attributes
+
+  grouping te-node-info-attributes {
+    description
+      "Advertised TE information attributes.";
+    leaf domain-id {
+      type uint32;
+      description
+        "Identifies the domain to which this node belongs.
+         This attribute is used to support inter-domain links.";
+      reference
+        "RFC 5152: A Per-Domain Path Computation Method for
+         Establishing Inter-Domain Traffic Engineering (TE)
+         Label Switched Paths (LSPs)
+         RFC 5316: ISIS Extensions in Support of Inter-Autonomous
+         System (AS) MPLS and GMPLS Traffic Engineering
+         RFC 5392: OSPF Extensions in Support of Inter-Autonomous
+         System (AS) MPLS and GMPLS Traffic Engineering";
+    }
+    leaf is-abstract {
+      type empty;
+      description
+        "Present if the node is abstract; not present if the node
+         is actual.";
+    }
+    leaf name {
+      type string;
+      description
+        "Node name.";
+    }
+    leaf-list signaling-address {
+      type inet:ip-address;
+      description
+        "The node's signaling address.";
+    }
+    container underlay-topology {
+      if-feature "te-topology-hierarchy";
+      description
+        "When an abstract node encapsulates a topology, the
+         attributes in this container point to said topology.";
+      uses nw:network-ref;
+    }
+  }
+  // te-node-info-attributes
+
+  grouping te-node-state-derived {
+    description
+      "Node state attributes in a TE topology.";
+    leaf oper-status {
+      type te-types:te-oper-status;
+      config false;
+      description
+        "The current operational state of the node.";
+    }
+    uses geolocation-container;
+    leaf is-multi-access-dr {
+      type empty;
+      config false;
+      description
+        "The presence of this attribute indicates that this TE node
+         is a pseudonode elected as a designated router.";
+      reference
+        "RFC 1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
+         Environments
+         RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2";
+    }
+    uses information-source-per-node-attributes;
+    list information-source-entry {
+      key "information-source information-source-instance";
+      config false;
+      description
+        "A list of information sources learned, including the source
+         that is used.";
+      uses information-source-per-node-attributes;
+      uses te-node-connectivity-matrices;
+      uses te-node-info-attributes;
+    }
+  }
+  // te-node-state-derived
+
+  grouping te-node-tunnel-termination-point-config {
+    description
+      "Termination capability of a TTP on a TE node.";
+    uses te-node-tunnel-termination-point-config-attributes;
+    container local-link-connectivities {
+      description
+        "Contains an LLCL for a TTP on a TE node.";
+      leaf number-of-entries {
+        type uint16;
+        description
+          "The number of LLCL entries.
+           If this number is specified in the configuration request,
+           the number is the requested number of entries, which may
+           not all be listed in the list;
+           if this number is reported in the state data,
+           the number is the current number of operational entries.";
+      }
+      uses te-types:label-set-info;
+      uses connectivity-matrix-entry-path-attributes;
+    }
+  }
+  // te-node-tunnel-termination-point-config
+
+  grouping te-node-tunnel-termination-point-config-attributes {
+    description
+      "Configuration attributes of a TTP on a TE node.";
+    leaf admin-status {
+      type te-types:te-admin-status;
+      description
+        "The administrative state of the TTP.";
+    }
+    leaf name {
+      type string;
+      description
+        "A descriptive name for the TTP.";
+    }
+    leaf switching-capability {
+      type identityref {
+        base te-types:switching-capabilities;
+      }
+      description
+        "Switching capability for this interface.";
+    }
+    leaf encoding {
+      type identityref {
+        base te-types:lsp-encoding-types;
+      }
+      description
+        "Encoding supported by this interface.";
+    }
+    leaf-list inter-layer-lock-id {
+      type uint32;
+      description
+        "Inter-layer lock ID, used for path computation in a TE
+         topology covering multiple layers or multiple regions.";
+      reference
+        "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+         Multi-Layer Networks (MRN/MLN)
+         RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+         for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+    }
+    leaf protection-type {
+      type identityref {
+        base te-types:lsp-protection-type;
+      }
+      description
+        "The protection type that this TTP is capable of.";
+    }
+    container client-layer-adaptation {
+      description
+        "Contains capability information to support a client-layer
+         adaptation in a multi-layer topology.";
+      list switching-capability {
+        key "switching-capability encoding";
+        description
+          "List of supported switching capabilities.";
+        reference
+          "RFC 4202: Routing Extensions in Support of
+           Generalized Multi-Protocol Label Switching (GMPLS)
+           RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+           for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+        leaf switching-capability {
+          type identityref {
+            base te-types:switching-capabilities;
+          }
+          description
+            "Switching capability for the client-layer adaptation.";
+        }
+        leaf encoding {
+          type identityref {
+            base te-types:lsp-encoding-types;
+          }
+          description
+            "Encoding supported by the client-layer adaptation.";
+        }
+        uses te-types:te-bandwidth;
+      }
+    }
+  }
+  // te-node-tunnel-termination-point-config-attributes
+
+  grouping te-node-tunnel-termination-point-llc-list {
+    description
+      "LLCL of a TTP on a TE node.";
+    list local-link-connectivity {
+      key "link-tp-ref";
+      description
+        "The termination capabilities between the TTP and the LTP.
+         This capability information can be used to compute
+         the tunnel path.
+         The Interface Adjustment Capability Descriptors (IACDs)
+         (defined in RFC 6001) on each LTP can be derived from
+         this list.";
+      reference
+        "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+         for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+      leaf link-tp-ref {
+        type leafref {
+          path "../../../../../nt:termination-point/nt:tp-id";
+        }
+        description
+          "LTP.";
+      }
+      uses te-types:label-set-info;
+      uses connectivity-matrix-entry-path-attributes;
+    }
+  }
+  // te-node-tunnel-termination-point-llc-list
+
+  grouping te-path-element {
+    description
+      "A group of attributes defining an element in a TE path,
+       such as a TE node, TE link, TE atomic resource, or label.";
+    uses te-types:explicit-route-hop;
+  }
+  // te-path-element
+
+  grouping te-termination-point-augment {
+    description
+      "Augmentation for a TE termination point.";
+    leaf te-tp-id {
+      type te-types:te-tp-id;
+      description
+        "An identifier that uniquely identifies a TE termination
+         point.";
+    }
+    container te {
+      must '../te-tp-id';
+      presence "TE support";
+      description
+        "Indicates TE support.";
+      uses te-termination-point-config;
+      leaf oper-status {
+        type te-types:te-oper-status;
+        config false;
+        description
+          "The current operational state of the LTP.";
+      }
+      uses geolocation-container;
+    }
+  }
+  // te-termination-point-augment
+
+  grouping te-termination-point-config {
+    description
+      "TE termination point configuration grouping.";
+    leaf admin-status {
+      type te-types:te-admin-status;
+      description
+        "The administrative state of the LTP.";
+    }
+    leaf name {
+      type string;
+      description
+        "A descriptive name for the LTP.";
+    }
+    uses interface-switching-capability-list;
+    leaf inter-domain-plug-id {
+      type binary;
+      description
+        "A network-wide unique number that identifies on the
+         network a connection that supports a given inter-domain
+         TE link.  This is a more flexible alternative to specifying
+         'remote-te-node-id' and 'remote-te-link-tp-id' on a TE link
+         when the provider either does not know 'remote-te-node-id'
+         and 'remote-te-link-tp-id' or needs to give the client the
+         flexibility to mix and match multiple topologies.";
+    }
+    leaf-list inter-layer-lock-id {
+      type uint32;
+      description
+        "Inter-layer lock ID, used for path computation in a TE
+         topology covering multiple layers or multiple regions.";
+      reference
+        "RFC 5212: Requirements for GMPLS-Based Multi-Region and
+         Multi-Layer Networks (MRN/MLN)
+         RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions
+         for Multi-Layer and Multi-Region Networks (MLN/MRN)";
+    }
+  }
+  // te-termination-point-config
+
+  grouping te-topologies-augment {
+    description
+      "Augmentation for TE topologies.";
+    container te {
+      presence "TE support";
+      description
+        "Indicates TE support.";
+      container templates {
+        description
+          "Configuration parameters for templates used for a TE
+           topology.";
+        list node-template {
+          if-feature "template";
+          key "name";
+          leaf name {
+            type te-types:te-template-name;
+            description
+              "The name to identify a TE node template.";
+          }
+          description
+            "The list of TE node templates used to define sharable
+             and reusable TE node attributes.";
+          uses template-attributes;
+          uses te-node-config-attributes-template;
+        }
+        // node-template
+        list link-template {
+          if-feature "template";
+          key "name";
+          leaf name {
+            type te-types:te-template-name;
+            description
+              "The name to identify a TE link template.";
+          }
+          description
+            "The list of TE link templates used to define sharable
+             and reusable TE link attributes.";
+          uses template-attributes;
+          uses te-link-config-attributes;
+        }
+        // link-template
+      }
+      // templates
+    }
+    // te
+  }
+  // te-topologies-augment
+
+  grouping te-topology-augment {
+    description
+      "Augmentation for a TE topology.";
+    uses te-types:te-topology-identifier;
+    container te {
+      must '../te-topology-identifier/provider-id'
+         + ' and ../te-topology-identifier/client-id'
+         + ' and ../te-topology-identifier/topology-id';
+      presence "TE support";
+      description
+        "Indicates TE support.";
+      uses te-topology-config;
+      uses geolocation-container;
+    }
+  }
+  // te-topology-augment
+
+  grouping te-topology-config {
+    description
+      "TE topology configuration grouping.";
+    leaf name {
+      type string;
+      description
+        "Name of the TE topology.  This attribute is optional and can
+         be specified by the operator to describe the TE topology,
+         which can be useful when 'network-id' (RFC 8345) is not
+         descriptive and not modifiable because of being generated
+         by the system.";
+      reference
+        "RFC 8345: A YANG Data Model for Network Topologies";
+    }
+    leaf preference {
+      type uint8 {
+        range "1..255";
+      }
+      description
+        "Specifies a preference for this topology.  A lower number
+         indicates a higher preference.";
+    }
+    leaf optimization-criterion {
+      type identityref {
+        base te-types:objective-function-type;
+      }
+      description
+        "Optimization criterion applied to this topology.";
+      reference
+        "RFC 3272: Overview and Principles of Internet Traffic
+         Engineering";
+    }
+    list nsrlg {
+      if-feature "nsrlg";
+      key "id";
+      description
+        "List of NSRLGs (Non-Shared Risk Link Groups).";
+      reference
+        "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+         Generalized Multi-Protocol Label Switching (GMPLS)
+         Recovery";
+      leaf id {
+        type uint32;
+        description
+          "Identifies the NSRLG entry.";
+      }
+      leaf disjointness {
+        type te-types:te-path-disjointness;
+        description
+          "The type of resource disjointness.";
+      }
+    }
+    // nsrlg
+  }
+  // te-topology-config
+
+  grouping template-attributes {
+    description
+      "Common attributes for all templates.";
+    leaf priority {
+      type uint16;
+      description
+        "The preference value for resolving conflicts between
+         different templates.  When two or more templates specify
+         values for one configuration attribute, the value from the
+         template with the highest priority is used.
+         A lower number indicates a higher priority.  The highest
+         priority is 0.";
+    }
+    leaf reference-change-policy {
+      type enumeration {
+        enum no-action {
+          description
+            "When an attribute changes in this template, the
+             configuration node referring to this template does
+             not take any action.";
+        }
+        enum not-allowed {
+          description
+            "When any configuration object has a reference to this
+             template, changing this template is not allowed.";
+        }
+        enum cascade {
+          description
+            "When an attribute changes in this template, the
+             configuration object referring to this template applies
+             the new attribute value to the corresponding
+             configuration.";
+        }
+      }
+      description
+        "This attribute specifies the action taken for a
+         configuration node that has a reference to this template.";
+    }
+  }
+  // template-attributes
+
+  /*
+   * Data nodes
+   */
+
+  augment "/nw:networks/nw:network/nw:network-types" {
+    description
+      "Introduces a new network type for a TE topology.";
+    container te-topology {
+      presence "Indicates a TE topology";
+      description
+        "Its presence identifies the TE topology type.";
+    }
+  }
+
+  augment "/nw:networks" {
+    description
+      "Augmentation parameters for TE topologies.";
+    uses te-topologies-augment;
+  }
+
+  augment "/nw:networks/nw:network" {
+    when 'nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Configuration parameters for a TE topology.";
+    uses te-topology-augment;
+  }
+
+  augment "/nw:networks/nw:network/nw:node" {
+    when '../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Configuration parameters for TE at the node level.";
+    leaf te-node-id {
+      type te-types:te-node-id;
+      description
+        "The identifier of a node in the TE topology.
+         A node is specific to a topology to which it belongs.";
+    }
+    container te {
+      must '../te-node-id' {
+        description
+          "'te-node-id' is mandatory.";
+      }
+      must 'count(../nw:supporting-node)<=1' {
+        description
+          "For a node in a TE topology, there cannot be more
+           than one supporting node.  If multiple nodes are
+           abstracted, the 'underlay-topology' field is used.";
+      }
+      presence "TE support";
+      description
+        "Indicates TE support.";
+      uses te-node-augment;
+    }
+  }
+
+  augment "/nw:networks/nw:network/nt:link" {
+    when '../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Configuration parameters for TE at the link level.";
+    container te {
+      must 'count(../nt:supporting-link)<=1' {
+        description
+          "For a link in a TE topology, there cannot be more
+           than one supporting link.  If one or more link paths are
+           abstracted, the underlay is used.";
+      }
+      presence "TE support";
+      description
+        "Indicates TE support.";
+      uses te-link-augment;
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:node/"
+        + "nt:termination-point" {
+    when '../../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Configuration parameters for TE at the termination point
+       level.";
+    uses te-termination-point-augment;
+  }
+
+  augment "/nw:networks/nw:network/nt:link/te/bundle-stack-level/"
+        + "bundle/bundled-links/bundled-link" {
+    when '../../../../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Augmentation for a TE bundled link.";
+    leaf src-tp-ref {
+      type leafref {
+        path "../../../../../nw:node[nw:node-id = "
+           + "current()/../../../../nt:source/"
+           + "nt:source-node]/"
+           + "nt:termination-point/nt:tp-id";
+        require-instance true;
+      }
+      description
+        "Reference to another TE termination point on the
+         same source node.";
+    }
+    leaf des-tp-ref {
+      type leafref {
+        path "../../../../../nw:node[nw:node-id = "
+           + "current()/../../../../nt:destination/"
+           + "nt:dest-node]/"
+           + "nt:termination-point/nt:tp-id";
+        require-instance true;
+      }
+      description
+        "Reference to another TE termination point on the
+         same destination node.";
+    }
+  }
+
+  augment "/nw:networks/nw:network/nw:node/te/"
+        + "information-source-entry/connectivity-matrices/"
+        + "connectivity-matrix" {
+    when '../../../../../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Augmentation for the TE node connectivity matrix.";
+    uses te-node-connectivity-matrix-attributes;
+  }
+
+  augment "/nw:networks/nw:network/nw:node/te/te-node-attributes/"
+        + "connectivity-matrices/connectivity-matrix" {
+    when '../../../../../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Augmentation for the TE node connectivity matrix.";
+    uses te-node-connectivity-matrix-attributes;
+  }
+
+  augment "/nw:networks/nw:network/nw:node/te/"
+        + "tunnel-termination-point/local-link-connectivities" {
+    when '../../../../nw:network-types/tet:te-topology' {
+      description
+        "Augmentation parameters apply only for networks with a
+         TE topology type.";
+    }
+    description
+      "Augmentation for TE node TTP LLCs (Local Link
+       Connectivities).";
+    uses te-node-tunnel-termination-point-llc-list;
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-types@2020-06-10.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-types@2020-06-10.yang
new file mode 100644
index 0000000000000000000000000000000000000000..6fc0544dede2128f3e91f8cf5a39caa8cc49ab6e
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-te-types@2020-06-10.yang
@@ -0,0 +1,3379 @@
+module ietf-te-types {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-te-types";
+  prefix te-types;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  import ietf-routing-types {
+    prefix rt-types;
+    reference
+      "RFC 8294: Common YANG Data Types for the Routing Area";
+  }
+
+  organization
+    "IETF Traffic Engineering Architecture and Signaling (TEAS)
+     Working Group";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/teas/>
+     WG List:  <mailto:teas@ietf.org>
+
+     Editor:   Tarek Saad
+               <mailto:tsaad@juniper.net>
+
+     Editor:   Rakesh Gandhi
+               <mailto:rgandhi@cisco.com>
+
+     Editor:   Vishnu Pavan Beeram
+               <mailto:vbeeram@juniper.net>
+
+     Editor:   Xufeng Liu
+               <mailto:xufeng.liu.ietf@gmail.com>
+
+     Editor:   Igor Bryskin
+               <mailto:i_bryskin@yahoo.com>";
+  description
+    "This YANG module contains a collection of generally useful
+     YANG data type definitions specific to TE.  The model fully
+     conforms to the Network Management Datastore Architecture
+     (NMDA).
+
+     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+     'MAY', and 'OPTIONAL' in this document are to be interpreted as
+     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+     they appear in all capitals, as shown here.
+
+     Copyright (c) 2020 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Simplified BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8776; see the
+     RFC itself for full legal notices.";
+
+  revision 2020-06-10 {
+    description
+      "Latest revision of TE types.";
+    reference
+      "RFC 8776: Common YANG Data Types for Traffic Engineering";
+  }
+
+  /**
+   * Typedefs
+   */
+
+  typedef admin-group {
+    type yang:hex-string {
+      /* 01:02:03:04 */
+      length "1..11";
+    }
+    description
+      "Administrative group / resource class / color representation
+       in 'hex-string' type.
+       The most significant byte in the hex-string is the farthest
+       to the left in the byte sequence.  Leading zero bytes in the
+       configured value may be omitted for brevity.";
+    reference
+      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+       Version 2
+       RFC 5305: IS-IS Extensions for Traffic Engineering
+       RFC 7308: Extended Administrative Groups in MPLS Traffic
+       Engineering (MPLS-TE)";
+  }
+
+  typedef admin-groups {
+    type union {
+      type admin-group;
+      type extended-admin-group;
+    }
+    description
+      "Derived types for TE administrative groups.";
+  }
+
+  typedef extended-admin-group {
+    type yang:hex-string;
+    description
+      "Extended administrative group / resource class / color
+       representation in 'hex-string' type.
+       The most significant byte in the hex-string is the farthest
+       to the left in the byte sequence.  Leading zero bytes in the
+       configured value may be omitted for brevity.";
+    reference
+      "RFC 7308: Extended Administrative Groups in MPLS Traffic
+       Engineering (MPLS-TE)";
+  }
+
+  typedef path-attribute-flags {
+    type union {
+      type identityref {
+        base session-attributes-flags;
+      }
+      type identityref {
+        base lsp-attributes-flags;
+      }
+    }
+    description
+      "Path attributes flags type.";
+  }
+
+  typedef performance-metrics-normality {
+    type enumeration {
+      enum unknown {
+        value 0;
+        description
+          "Unknown.";
+      }
+      enum normal {
+        value 1;
+        description
+          "Normal.  Indicates that the anomalous bit is not set.";
+      }
+      enum abnormal {
+        value 2;
+        description
+          "Abnormal.  Indicates that the anomalous bit is set.";
+      }
+    }
+    description
+      "Indicates whether a performance metric is normal (anomalous
+       bit not set), abnormal (anomalous bit set), or unknown.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+       RFC 7823: Performance-Based Path Selection for Explicitly
+       Routed Label Switched Paths (LSPs) Using TE Metric
+       Extensions
+       RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+  }
+
+  typedef srlg {
+    type uint32;
+    description
+      "SRLG type.";
+    reference
+      "RFC 4203: OSPF Extensions in Support of Generalized
+       Multi-Protocol Label Switching (GMPLS)
+       RFC 5307: IS-IS Extensions in Support of Generalized
+       Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  typedef te-common-status {
+    type enumeration {
+      enum up {
+        description
+          "Enabled.";
+      }
+      enum down {
+        description
+          "Disabled.";
+      }
+      enum testing {
+        description
+          "In some test mode.";
+      }
+      enum preparing-maintenance {
+        description
+          "The resource is disabled in the control plane to prepare
+           for a graceful shutdown for maintenance purposes.";
+        reference
+          "RFC 5817: Graceful Shutdown in MPLS and Generalized MPLS
+           Traffic Engineering Networks";
+      }
+      enum maintenance {
+        description
+          "The resource is disabled in the data plane for maintenance
+           purposes.";
+      }
+      enum unknown {
+        description
+          "Status is unknown.";
+      }
+    }
+    description
+      "Defines a type representing the common states of a TE
+       resource.";
+  }
+
+  typedef te-bandwidth {
+    type string {
+      pattern '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+            + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?'
+            + '[pP](\+)?(12[0-7]|'
+            + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+'
+            + '(,(0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|'
+            + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?'
+            + '[pP](\+)?(12[0-7]|'
+            + '1[01]\d|0?\d?\d)?)|0[xX][\da-fA-F]{1,8}|\d+))*';
+    }
+    description
+      "This is the generic bandwidth type.  It is a string containing
+       a list of numbers separated by commas, where each of these
+       numbers can be non-negative decimal, hex integer, or
+       hex float:
+
+       (dec | hex | float)[*(','(dec | hex | float))]
+
+       For the packet-switching type, the string encoding follows
+       the type 'bandwidth-ieee-float32' as defined in RFC 8294
+       (e.g., 0x1p10), where the units are in bytes per second.
+
+       For the Optical Transport Network (OTN) switching type,
+       a list of integers can be used, such as '0,2,3,1', indicating
+       two ODU0s and one ODU3.  ('ODU' stands for 'Optical Data
+       Unit'.)  For Dense Wavelength Division Multiplexing (DWDM),
+       a list of pairs of slot numbers and widths can be used,
+       such as '0,2,3,3', indicating a frequency slot 0 with
+       slot width 2 and a frequency slot 3 with slot width 3.
+       Canonically, the string is represented as all lowercase and in
+       hex, where the prefix '0x' precedes the hex number.";
+    reference
+      "RFC 8294: Common YANG Data Types for the Routing Area
+       ITU-T Recommendation G.709: Interfaces for the
+       optical transport network";
+  }
+
+  typedef te-ds-class {
+    type uint8 {
+      range "0..7";
+    }
+    description
+      "The Differentiated Services Class-Type of traffic.";
+    reference
+      "RFC 4124: Protocol Extensions for Support of Diffserv-aware
+       MPLS Traffic Engineering, Section 4.3.1";
+  }
+
+  typedef te-global-id {
+    type uint32;
+    description
+      "An identifier to uniquely identify an operator, which can be
+       either a provider or a client.
+       The definition of this type is taken from RFCs 6370 and 5003.
+       This attribute type is used solely to provide a globally
+       unique context for TE topologies.";
+    reference
+      "RFC 5003: Attachment Individual Identifier (AII) Types for
+       Aggregation
+       RFC 6370: MPLS Transport Profile (MPLS-TP) Identifiers";
+  }
+
+  typedef te-hop-type {
+    type enumeration {
+      enum loose {
+        description
+          "A loose hop in an explicit path.";
+      }
+      enum strict {
+        description
+          "A strict hop in an explicit path.";
+      }
+    }
+    description
+      "Enumerated type for specifying loose or strict paths.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+       Section 4.3.3";
+  }
+
+  typedef te-link-access-type {
+    type enumeration {
+      enum point-to-point {
+        description
+          "The link is point-to-point.";
+      }
+      enum multi-access {
+        description
+          "The link is multi-access, including broadcast and NBMA.";
+      }
+    }
+    description
+      "Defines a type representing the access type of a TE link.";
+    reference
+      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+       Version 2";
+  }
+
+  typedef te-label-direction {
+    type enumeration {
+      enum forward {
+        description
+          "Label allocated for the forward LSP direction.";
+      }
+      enum reverse {
+        description
+          "Label allocated for the reverse LSP direction.";
+      }
+    }
+    description
+      "Enumerated type for specifying the forward or reverse
+       label.";
+  }
+
+  typedef te-link-direction {
+    type enumeration {
+      enum incoming {
+        description
+          "The explicit route represents an incoming link on
+           a node.";
+      }
+      enum outgoing {
+        description
+          "The explicit route represents an outgoing link on
+           a node.";
+      }
+    }
+    description
+      "Enumerated type for specifying the direction of a link on
+       a node.";
+  }
+
+  typedef te-metric {
+    type uint32;
+    description
+      "TE metric.";
+    reference
+      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+       second MPLS Traffic Engineering (TE) Metric";
+  }
+
+  typedef te-node-id {
+    type yang:dotted-quad;
+    description
+      "A type representing the identifier for a node in a TE
+       topology.
+       The identifier is represented as 4 octets in dotted-quad
+       notation.
+       This attribute MAY be mapped to the Router Address TLV
+       described in Section 2.4.1 of RFC 3630, the TE Router ID
+       described in Section 3 of RFC 6827, the Traffic Engineering
+       Router ID TLV described in Section 4.3 of RFC 5305, or the
+       TE Router ID TLV described in Section 3.2.1 of RFC 6119.
+       The reachability of such a TE node MAY be achieved by a
+       mechanism such as that described in Section 6.2 of RFC 6827.";
+    reference
+      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+       Version 2, Section 2.4.1
+       RFC 5305: IS-IS Extensions for Traffic Engineering,
+       Section 4.3
+       RFC 6119: IPv6 Traffic Engineering in IS-IS, Section 3.2.1
+       RFC 6827: Automatically Switched Optical Network (ASON)
+       Routing for OSPFv2 Protocols, Section 3";
+  }
+
+  typedef te-oper-status {
+    type te-common-status;
+    description
+      "Defines a type representing the operational status of
+       a TE resource.";
+  }
+
+  typedef te-admin-status {
+    type te-common-status;
+    description
+      "Defines a type representing the administrative status of
+       a TE resource.";
+  }
+
+  typedef te-path-disjointness {
+    type bits {
+      bit node {
+        position 0;
+        description
+          "Node disjoint.";
+      }
+      bit link {
+        position 1;
+        description
+          "Link disjoint.";
+      }
+      bit srlg {
+        position 2;
+        description
+          "SRLG (Shared Risk Link Group) disjoint.";
+      }
+    }
+    description
+      "Type of the resource disjointness for a TE tunnel path.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  typedef te-recovery-status {
+    type enumeration {
+      enum normal {
+        description
+          "Both the recovery span and the working span are fully
+           allocated and active, data traffic is being
+           transported over (or selected from) the working
+           span, and no trigger events are reported.";
+      }
+      enum recovery-started {
+        description
+          "The recovery action has been started but not completed.";
+      }
+      enum recovery-succeeded {
+        description
+          "The recovery action has succeeded.  The working span has
+           reported a failure/degrade condition, and the user traffic
+           is being transported (or selected) on the recovery span.";
+      }
+      enum recovery-failed {
+        description
+          "The recovery action has failed.";
+      }
+      enum reversion-started {
+        description
+          "The reversion has started.";
+      }
+      enum reversion-succeeded {
+        description
+          "The reversion action has succeeded.";
+      }
+      enum reversion-failed {
+        description
+          "The reversion has failed.";
+      }
+      enum recovery-unavailable {
+        description
+          "The recovery is unavailable, as a result of either an
+           operator's lockout command or a failure condition
+           detected on the recovery span.";
+      }
+      enum recovery-admin {
+        description
+          "The operator has issued a command to switch the user
+           traffic to the recovery span.";
+      }
+      enum wait-to-restore {
+        description
+          "The recovery domain is recovering from a failure/degrade
+           condition on the working span that is being controlled by
+           the Wait-to-Restore (WTR) timer.";
+      }
+    }
+    description
+      "Defines the status of a recovery action.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)
+       RFC 6378: MPLS Transport Profile (MPLS-TP) Linear Protection";
+  }
+
+  typedef te-template-name {
+    type string {
+      pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
+    }
+    description
+      "A type for the name of a TE node template or TE link
+       template.";
+  }
+
+  typedef te-topology-event-type {
+    type enumeration {
+      enum add {
+        value 0;
+        description
+          "A TE node or TE link has been added.";
+      }
+      enum remove {
+        value 1;
+        description
+          "A TE node or TE link has been removed.";
+      }
+      enum update {
+        value 2;
+        description
+          "A TE node or TE link has been updated.";
+      }
+    }
+    description
+      "TE event type for notifications.";
+  }
+
+  typedef te-topology-id {
+    type union {
+      type string {
+        length "0";
+        // empty string
+      }
+      type string {
+        pattern '([a-zA-Z0-9\-_.]+:)*'
+              + '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
+      }
+    }
+    description
+      "An identifier for a topology.
+       It is optional to have one or more prefixes at the beginning,
+       separated by colons.  The prefixes can be 'network-types' as
+       defined in the 'ietf-network' module in RFC 8345, to help the
+       user better understand the topology before further inquiry
+       is made.";
+    reference
+      "RFC 8345: A YANG Data Model for Network Topologies";
+  }
+
+  typedef te-tp-id {
+    type union {
+      type uint32;
+      // Unnumbered
+      type inet:ip-address;
+      // IPv4 or IPv6 address
+    }
+    description
+      "An identifier for a TE link endpoint on a node.
+       This attribute is mapped to a local or remote link identifier
+       as defined in RFCs 3630 and 5305.";
+    reference
+      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+       Version 2
+       RFC 5305: IS-IS Extensions for Traffic Engineering";
+  }
+
+  /* TE features */
+
+  feature p2mp-te {
+    description
+      "Indicates support for Point-to-Multipoint TE (P2MP-TE).";
+    reference
+      "RFC 4875: Extensions to Resource Reservation Protocol -
+       Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+       Label Switched Paths (LSPs)";
+  }
+
+  feature frr-te {
+    description
+      "Indicates support for TE Fast Reroute (FRR).";
+    reference
+      "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+  }
+
+  feature extended-admin-groups {
+    description
+      "Indicates support for TE link extended administrative
+       groups.";
+    reference
+      "RFC 7308: Extended Administrative Groups in MPLS Traffic
+       Engineering (MPLS-TE)";
+  }
+
+  feature named-path-affinities {
+    description
+      "Indicates support for named path affinities.";
+  }
+
+  feature named-extended-admin-groups {
+    description
+      "Indicates support for named extended administrative groups.";
+  }
+
+  feature named-srlg-groups {
+    description
+      "Indicates support for named SRLG groups.";
+  }
+
+  feature named-path-constraints {
+    description
+      "Indicates support for named path constraints.";
+  }
+
+  feature path-optimization-metric {
+    description
+      "Indicates support for path optimization metrics.";
+  }
+
+  feature path-optimization-objective-function {
+    description
+      "Indicates support for path optimization objective functions.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity session-attributes-flags {
+    description
+      "Base identity for the RSVP-TE session attributes flags.";
+  }
+
+  identity local-protection-desired {
+    base session-attributes-flags;
+    description
+      "Local protection is desired.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+       Section 4.7.1";
+  }
+
+  identity se-style-desired {
+    base session-attributes-flags;
+    description
+      "Shared explicit style, to allow the LSP to be established
+       and share resources with the old LSP.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity local-recording-desired {
+    base session-attributes-flags;
+    description
+      "Label recording is desired.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+       Section 4.7.1";
+  }
+
+  identity bandwidth-protection-desired {
+    base session-attributes-flags;
+    description
+      "Requests FRR bandwidth protection on LSRs, if present.";
+    reference
+      "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+  }
+
+  identity node-protection-desired {
+    base session-attributes-flags;
+    description
+      "Requests FRR node protection on LSRs, if present.";
+    reference
+      "RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP Tunnels";
+  }
+
+  identity path-reevaluation-request {
+    base session-attributes-flags;
+    description
+      "This flag indicates that a path re-evaluation (of the
+       current path in use) is requested.  Note that this does
+       not trigger any LSP reroutes but instead just signals a
+       request to evaluate whether a preferable path exists.";
+    reference
+      "RFC 4736: Reoptimization of Multiprotocol Label Switching
+       (MPLS) Traffic Engineering (TE) Loosely Routed Label Switched
+       Path (LSP)";
+  }
+
+  identity soft-preemption-desired {
+    base session-attributes-flags;
+    description
+      "Soft preemption of LSP resources is desired.";
+    reference
+      "RFC 5712: MPLS Traffic Engineering Soft Preemption";
+  }
+
+  identity lsp-attributes-flags {
+    description
+      "Base identity for LSP attributes flags.";
+  }
+
+  identity end-to-end-rerouting-desired {
+    base lsp-attributes-flags;
+    description
+      "Indicates end-to-end rerouting behavior for an LSP
+       undergoing establishment.  This MAY also be used to
+       specify the behavior of end-to-end LSP recovery for
+       established LSPs.";
+    reference
+      "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+       RSVP-TE
+       RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+       Using Resource Reservation Protocol Traffic Engineering
+       (RSVP-TE)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity boundary-rerouting-desired {
+    base lsp-attributes-flags;
+    description
+      "Indicates boundary rerouting behavior for an LSP undergoing
+       establishment.  This MAY also be used to specify
+       segment-based LSP recovery through nested crankback for
+       established LSPs.  The boundary Area Border Router (ABR) /
+       Autonomous System Border Router (ASBR) can decide to forward
+       the PathErr message upstream to either an upstream boundary
+       ABR/ASBR or the ingress LSR.  Alternatively, it can try to
+       select another egress boundary LSR.";
+    reference
+      "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+       RSVP-TE
+       RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+       Using Resource Reservation Protocol Traffic Engineering
+       (RSVP-TE)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity segment-based-rerouting-desired {
+    base lsp-attributes-flags;
+    description
+      "Indicates segment-based rerouting behavior for an LSP
+       undergoing establishment.  This MAY also be used to specify
+       segment-based LSP recovery for established LSPs.";
+    reference
+      "RFC 4920: Crankback Signaling Extensions for MPLS and GMPLS
+       RSVP-TE
+       RFC 5420: Encoding of Attributes for MPLS LSP Establishment
+       Using Resource Reservation Protocol Traffic Engineering
+       (RSVP-TE)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity lsp-integrity-required {
+    base lsp-attributes-flags;
+    description
+      "Indicates that LSP integrity is required.";
+    reference
+      "RFC 4875: Extensions to Resource Reservation Protocol -
+       Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+       Label Switched Paths (LSPs)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity contiguous-lsp-desired {
+    base lsp-attributes-flags;
+    description
+      "Indicates that a contiguous LSP is desired.";
+    reference
+      "RFC 5151: Inter-Domain MPLS and GMPLS Traffic Engineering --
+       Resource Reservation Protocol-Traffic Engineering (RSVP-TE)
+       Extensions
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity lsp-stitching-desired {
+    base lsp-attributes-flags;
+    description
+      "Indicates that LSP stitching is desired.";
+    reference
+      "RFC 5150: Label Switched Path Stitching with Generalized
+       Multiprotocol Label Switching Traffic Engineering (GMPLS TE)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity pre-planned-lsp-flag {
+    base lsp-attributes-flags;
+    description
+      "Indicates that the LSP MUST be provisioned in the
+       control plane only.";
+    reference
+      "RFC 6001: Generalized MPLS (GMPLS) Protocol Extensions for
+       Multi-Layer and Multi-Region Networks (MLN/MRN)
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity non-php-behavior-flag {
+    base lsp-attributes-flags;
+    description
+      "Indicates that non-PHP (non-Penultimate Hop Popping) behavior
+       for the LSP is desired.";
+    reference
+      "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band
+       Mapping for RSVP-TE Label Switched Paths
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity oob-mapping-flag {
+    base lsp-attributes-flags;
+    description
+      "Indicates that signaling of the egress binding information is
+       out of band (e.g., via the Border Gateway Protocol (BGP)).";
+    reference
+      "RFC 6511: Non-Penultimate Hop Popping Behavior and Out-of-Band
+       Mapping for RSVP-TE Label Switched Paths
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity entropy-label-capability {
+    base lsp-attributes-flags;
+    description
+      "Indicates entropy label capability.";
+    reference
+      "RFC 6790: The Use of Entropy Labels in MPLS Forwarding
+       RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)";
+  }
+
+  identity oam-mep-entity-desired {
+    base lsp-attributes-flags;
+    description
+      "OAM Maintenance Entity Group End Point (MEP) entities
+       desired.";
+    reference
+      "RFC 7260: GMPLS RSVP-TE Extensions for Operations,
+       Administration, and Maintenance (OAM) Configuration";
+  }
+
+  identity oam-mip-entity-desired {
+    base lsp-attributes-flags;
+    description
+      "OAM Maintenance Entity Group Intermediate Points (MIP)
+       entities desired.";
+    reference
+      "RFC 7260: GMPLS RSVP-TE Extensions for Operations,
+       Administration, and Maintenance (OAM) Configuration";
+  }
+
+  identity srlg-collection-desired {
+    base lsp-attributes-flags;
+    description
+      "SRLG collection desired.";
+    reference
+      "RFC 7570: Label Switched Path (LSP) Attribute in the Explicit
+       Route Object (ERO)
+       RFC 8001: RSVP-TE Extensions for Collecting Shared Risk
+       Link Group (SRLG) Information";
+  }
+
+  identity loopback-desired {
+    base lsp-attributes-flags;
+    description
+      "This flag indicates that a particular node on the LSP is
+       required to enter loopback mode.  This can also be
+       used to specify the loopback state of the node.";
+    reference
+      "RFC 7571: GMPLS RSVP-TE Extensions for Lock Instruct and
+       Loopback";
+  }
+
+  identity p2mp-te-tree-eval-request {
+    base lsp-attributes-flags;
+    description
+      "P2MP-TE tree re-evaluation request.";
+    reference
+      "RFC 8149: RSVP Extensions for Reoptimization of Loosely Routed
+       Point-to-Multipoint Traffic Engineering Label Switched Paths
+       (LSPs)";
+  }
+
+  identity rtm-set-desired {
+    base lsp-attributes-flags;
+    description
+      "Residence Time Measurement (RTM) attribute flag requested.";
+    reference
+      "RFC 8169: Residence Time Measurement in MPLS Networks";
+  }
+
+  identity link-protection-type {
+    description
+      "Base identity for the link protection type.";
+  }
+
+  identity link-protection-unprotected {
+    base link-protection-type;
+    description
+      "Unprotected link type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity link-protection-extra-traffic {
+    base link-protection-type;
+    description
+      "Extra-Traffic protected link type.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity link-protection-shared {
+    base link-protection-type;
+    description
+      "Shared protected link type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity link-protection-1-for-1 {
+    base link-protection-type;
+    description
+      "One-for-one (1:1) protected link type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity link-protection-1-plus-1 {
+    base link-protection-type;
+    description
+      "One-plus-one (1+1) protected link type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity link-protection-enhanced {
+    base link-protection-type;
+    description
+      "A compound link protection type derived from the underlay
+       TE tunnel protection configuration supporting the TE link.";
+  }
+
+  identity association-type {
+    description
+      "Base identity for the tunnel association.";
+  }
+
+  identity association-type-recovery {
+    base association-type;
+    description
+      "Association type for recovery, used to associate LSPs of the
+       same tunnel for recovery.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery
+       RFC 6780: RSVP ASSOCIATION Object Extensions";
+  }
+
+  identity association-type-resource-sharing {
+    base association-type;
+    description
+      "Association type for resource sharing, used to enable
+       resource sharing during make-before-break.";
+    reference
+      "RFC 4873: GMPLS Segment Recovery
+       RFC 6780: RSVP ASSOCIATION Object Extensions";
+  }
+
+  identity association-type-double-sided-bidir {
+    base association-type;
+    description
+      "Association type for double-sided bidirectional LSPs,
+       used to associate two LSPs of two tunnels that are
+       independently configured on either endpoint.";
+    reference
+      "RFC 7551: RSVP-TE Extensions for Associated Bidirectional
+       Label Switched Paths (LSPs)";
+  }
+
+  identity association-type-single-sided-bidir {
+    base association-type;
+    description
+      "Association type for single-sided bidirectional LSPs,
+       used to associate two LSPs of two tunnels, where one
+       tunnel is configured on one side/endpoint and the other
+       tunnel is dynamically created on the other endpoint.";
+    reference
+      "RFC 6780: RSVP ASSOCIATION Object Extensions
+       RFC 7551: RSVP-TE Extensions for Associated Bidirectional
+       Label Switched Paths (LSPs)";
+  }
+
+  identity objective-function-type {
+    description
+      "Base objective function type.";
+  }
+
+  identity of-minimize-cost-path {
+    base objective-function-type;
+    description
+      "Objective function for minimizing path cost.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity of-minimize-load-path {
+    base objective-function-type;
+    description
+      "Objective function for minimizing the load on one or more
+       paths.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity of-maximize-residual-bandwidth {
+    base objective-function-type;
+    description
+      "Objective function for maximizing residual bandwidth.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity of-minimize-agg-bandwidth-consumption {
+    base objective-function-type;
+    description
+      "Objective function for minimizing aggregate bandwidth
+       consumption.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity of-minimize-load-most-loaded-link {
+    base objective-function-type;
+    description
+      "Objective function for minimizing the load on the link that
+       is carrying the highest load.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity of-minimize-cost-path-set {
+    base objective-function-type;
+    description
+      "Objective function for minimizing the cost on a path set.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity path-computation-method {
+    description
+      "Base identity for supported path computation mechanisms.";
+  }
+
+  identity path-locally-computed {
+    base path-computation-method;
+    description
+      "Indicates a constrained-path LSP in which the
+       path is computed by the local LER.";
+    reference
+      "RFC 3272: Overview and Principles of Internet Traffic
+       Engineering, Section 5.4";
+  }
+
+  identity path-externally-queried {
+    base path-computation-method;
+    description
+      "Constrained-path LSP in which the path is obtained by
+       querying an external source, such as a PCE server.
+       In the case that an LSP is defined to be externally queried,
+       it may also have associated explicit definitions (provided
+       to the external source to aid computation).  The path that is
+       returned by the external source may require further local
+       computation on the device.";
+    reference
+      "RFC 3272: Overview and Principles of Internet Traffic
+       Engineering
+       RFC 4657: Path Computation Element (PCE) Communication
+       Protocol Generic Requirements";
+  }
+
+  identity path-explicitly-defined {
+    base path-computation-method;
+    description
+      "Constrained-path LSP in which the path is
+       explicitly specified as a collection of strict and/or loose
+       hops.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+       RFC 3272: Overview and Principles of Internet Traffic
+       Engineering";
+  }
+
+  identity lsp-metric-type {
+    description
+      "Base identity for the LSP metric specification types.";
+  }
+
+  identity lsp-metric-relative {
+    base lsp-metric-type;
+    description
+      "The metric specified for the LSPs to which this identity
+       refers is specified as a value relative to the IGP metric
+       cost to the LSP's tail end.";
+    reference
+      "RFC 4657: Path Computation Element (PCE) Communication
+       Protocol Generic Requirements";
+  }
+
+  identity lsp-metric-absolute {
+    base lsp-metric-type;
+    description
+      "The metric specified for the LSPs to which this identity
+       refers is specified as an absolute value.";
+    reference
+      "RFC 4657: Path Computation Element (PCE) Communication
+       Protocol Generic Requirements";
+  }
+
+  identity lsp-metric-inherited {
+    base lsp-metric-type;
+    description
+      "The metric for the LSPs to which this identity refers is
+       not specified explicitly; rather, it is directly inherited
+       from the IGP cost.";
+    reference
+      "RFC 4657: Path Computation Element (PCE) Communication
+       Protocol Generic Requirements";
+  }
+
+  identity te-tunnel-type {
+    description
+      "Base identity from which specific tunnel types are derived.";
+  }
+
+  identity te-tunnel-p2p {
+    base te-tunnel-type;
+    description
+      "TE Point-to-Point (P2P) tunnel type.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity te-tunnel-p2mp {
+    base te-tunnel-type;
+    description
+      "TE P2MP tunnel type.";
+    reference
+      "RFC 4875: Extensions to Resource Reservation Protocol -
+       Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+       Label Switched Paths (LSPs)";
+  }
+
+  identity tunnel-action-type {
+    description
+      "Base identity from which specific tunnel action types
+       are derived.";
+  }
+
+  identity tunnel-action-resetup {
+    base tunnel-action-type;
+    description
+      "TE tunnel action that tears down the tunnel's current LSP
+       (if any) and attempts to re-establish a new LSP.";
+  }
+
+  identity tunnel-action-reoptimize {
+    base tunnel-action-type;
+    description
+      "TE tunnel action that reoptimizes the placement of the
+       tunnel LSP(s).";
+  }
+
+  identity tunnel-action-switchpath {
+    base tunnel-action-type;
+    description
+      "TE tunnel action that switches the tunnel's LSP to use the
+       specified path.";
+  }
+
+  identity te-action-result {
+    description
+      "Base identity from which specific TE action results
+       are derived.";
+  }
+
+  identity te-action-success {
+    base te-action-result;
+    description
+      "TE action was successful.";
+  }
+
+  identity te-action-fail {
+    base te-action-result;
+    description
+      "TE action failed.";
+  }
+
+  identity tunnel-action-inprogress {
+    base te-action-result;
+    description
+      "TE action is in progress.";
+  }
+
+  identity tunnel-admin-state-type {
+    description
+      "Base identity for TE tunnel administrative states.";
+  }
+
+  identity tunnel-admin-state-up {
+    base tunnel-admin-state-type;
+    description
+      "Tunnel's administrative state is up.";
+  }
+
+  identity tunnel-admin-state-down {
+    base tunnel-admin-state-type;
+    description
+      "Tunnel's administrative state is down.";
+  }
+
+  identity tunnel-state-type {
+    description
+      "Base identity for TE tunnel states.";
+  }
+
+  identity tunnel-state-up {
+    base tunnel-state-type;
+    description
+      "Tunnel's state is up.";
+  }
+
+  identity tunnel-state-down {
+    base tunnel-state-type;
+    description
+      "Tunnel's state is down.";
+  }
+
+  identity lsp-state-type {
+    description
+      "Base identity for TE LSP states.";
+  }
+
+  identity lsp-path-computing {
+    base lsp-state-type;
+    description
+      "State path computation is in progress.";
+  }
+
+  identity lsp-path-computation-ok {
+    base lsp-state-type;
+    description
+      "State path computation was successful.";
+  }
+
+  identity lsp-path-computation-failed {
+    base lsp-state-type;
+    description
+      "State path computation failed.";
+  }
+
+  identity lsp-state-setting-up {
+    base lsp-state-type;
+    description
+      "State is being set up.";
+  }
+
+  identity lsp-state-setup-ok {
+    base lsp-state-type;
+    description
+      "State setup was successful.";
+  }
+
+  identity lsp-state-setup-failed {
+    base lsp-state-type;
+    description
+      "State setup failed.";
+  }
+
+  identity lsp-state-up {
+    base lsp-state-type;
+    description
+      "State is up.";
+  }
+
+  identity lsp-state-tearing-down {
+    base lsp-state-type;
+    description
+      "State is being torn down.";
+  }
+
+  identity lsp-state-down {
+    base lsp-state-type;
+    description
+      "State is down.";
+  }
+
+  identity path-invalidation-action-type {
+    description
+      "Base identity for TE path invalidation action types.";
+  }
+
+  identity path-invalidation-action-drop {
+    base path-invalidation-action-type;
+    description
+      "Upon invalidation of the TE tunnel path, the tunnel remains
+       valid, but any packet mapped over the tunnel is dropped.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+       Section 2.5";
+  }
+
+  identity path-invalidation-action-teardown {
+    base path-invalidation-action-type;
+    description
+      "TE path invalidation action teardown.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+       Section 2.5";
+  }
+
+  identity lsp-restoration-type {
+    description
+      "Base identity from which LSP restoration types are derived.";
+  }
+
+  identity lsp-restoration-restore-any {
+    base lsp-restoration-type;
+    description
+      "Any LSP affected by a failure is restored.";
+  }
+
+  identity lsp-restoration-restore-all {
+    base lsp-restoration-type;
+    description
+      "Affected LSPs are restored after all LSPs of the tunnel are
+       broken.";
+  }
+
+  identity restoration-scheme-type {
+    description
+      "Base identity for LSP restoration schemes.";
+  }
+
+  identity restoration-scheme-preconfigured {
+    base restoration-scheme-type;
+    description
+      "Restoration LSP is preconfigured prior to the failure.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity restoration-scheme-precomputed {
+    base restoration-scheme-type;
+    description
+      "Restoration LSP is precomputed prior to the failure.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity restoration-scheme-presignaled {
+    base restoration-scheme-type;
+    description
+      "Restoration LSP is presignaled prior to the failure.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity lsp-protection-type {
+    description
+      "Base identity from which LSP protection types are derived.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-unprotected {
+    base lsp-protection-type;
+    description
+      "'Unprotected' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-reroute-extra {
+    base lsp-protection-type;
+    description
+      "'(Full) Rerouting' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-reroute {
+    base lsp-protection-type;
+    description
+      "'Rerouting without Extra-Traffic' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-1-for-n {
+    base lsp-protection-type;
+    description
+      "'1:N Protection with Extra-Traffic' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-1-for-1 {
+    base lsp-protection-type;
+    description
+      "LSP protection '1:1 Protection Type'.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-unidir-1-plus-1 {
+    base lsp-protection-type;
+    description
+      "'1+1 Unidirectional Protection' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-bidir-1-plus-1 {
+    base lsp-protection-type;
+    description
+      "'1+1 Bidirectional Protection' LSP protection type.";
+    reference
+      "RFC 4872: RSVP-TE Extensions in Support of End-to-End
+       Generalized Multi-Protocol Label Switching (GMPLS) Recovery";
+  }
+
+  identity lsp-protection-extra-traffic {
+    base lsp-protection-type;
+    description
+      "Extra-Traffic LSP protection type.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity lsp-protection-state {
+    description
+      "Base identity of protection states for reporting purposes.";
+  }
+
+  identity normal {
+    base lsp-protection-state;
+    description
+      "Normal state.";
+  }
+
+  identity signal-fail-of-protection {
+    base lsp-protection-state;
+    description
+      "The protection transport entity has a signal fail condition
+       that is of higher priority than the forced switchover
+       command.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity lockout-of-protection {
+    base lsp-protection-state;
+    description
+      "A Loss of Protection (LoP) command is active.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity forced-switch {
+    base lsp-protection-state;
+    description
+      "A forced switchover command is active.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity signal-fail {
+    base lsp-protection-state;
+    description
+      "There is a signal fail condition on either the working path
+       or the protection path.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity signal-degrade {
+    base lsp-protection-state;
+    description
+      "There is a signal degrade condition on either the working
+       path or the protection path.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity manual-switch {
+    base lsp-protection-state;
+    description
+      "A manual switchover command is active.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity wait-to-restore {
+    base lsp-protection-state;
+    description
+      "A WTR timer is running.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity do-not-revert {
+    base lsp-protection-state;
+    description
+      "A Do Not Revert (DNR) condition is active because of
+       non-revertive behavior.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity failure-of-protocol {
+    base lsp-protection-state;
+    description
+      "LSP protection is not working because of a protocol failure
+       condition.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity protection-external-commands {
+    description
+      "Base identity from which protection-related external commands
+       used for troubleshooting purposes are derived.";
+  }
+
+  identity action-freeze {
+    base protection-external-commands;
+    description
+      "A temporary configuration action initiated by an operator
+       command that prevents any switchover action from being taken
+       and, as such, freezes the current state.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity clear-freeze {
+    base protection-external-commands;
+    description
+      "An action that clears the active freeze state.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity action-lockout-of-normal {
+    base protection-external-commands;
+    description
+      "A temporary configuration action initiated by an operator
+       command to ensure that the normal traffic is not allowed
+       to use the protection transport entity.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity clear-lockout-of-normal {
+    base protection-external-commands;
+    description
+      "An action that clears the active lockout of the
+       normal state.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity action-lockout-of-protection {
+    base protection-external-commands;
+    description
+      "A temporary configuration action initiated by an operator
+       command to ensure that the protection transport entity is
+       temporarily not available to transport a traffic signal
+       (either normal or Extra-Traffic).";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity action-forced-switch {
+    base protection-external-commands;
+    description
+      "A switchover action initiated by an operator command to switch
+       the Extra-Traffic signal, the normal traffic signal, or the
+       null signal to the protection transport entity, unless a
+       switchover command of equal or higher priority is in effect.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity action-manual-switch {
+    base protection-external-commands;
+    description
+      "A switchover action initiated by an operator command to switch
+       the Extra-Traffic signal, the normal traffic signal, or
+       the null signal to the protection transport entity, unless
+       a fault condition exists on other transport entities or a
+       switchover command of equal or higher priority is in effect.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity action-exercise {
+    base protection-external-commands;
+    description
+      "An action that starts testing whether or not APS communication
+       is operating correctly.  It is of lower priority than any
+       other state or command.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity clear {
+    base protection-external-commands;
+    description
+      "An action that clears the active near-end lockout of a
+       protection, forced switchover, manual switchover, WTR state,
+       or exercise command.";
+    reference
+      "RFC 4427: Recovery (Protection and Restoration) Terminology
+       for Generalized Multi-Protocol Label Switching (GMPLS)";
+  }
+
+  identity switching-capabilities {
+    description
+      "Base identity for interface switching capabilities.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity switching-psc1 {
+    base switching-capabilities;
+    description
+      "Packet-Switch Capable-1 (PSC-1).";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity switching-evpl {
+    base switching-capabilities;
+    description
+      "Ethernet Virtual Private Line (EVPL).";
+    reference
+      "RFC 6004: Generalized MPLS (GMPLS) Support for Metro Ethernet
+       Forum and G.8011 Ethernet Service Switching";
+  }
+
+  identity switching-l2sc {
+    base switching-capabilities;
+    description
+      "Layer-2 Switch Capable (L2SC).";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity switching-tdm {
+    base switching-capabilities;
+    description
+      "Time-Division-Multiplex Capable (TDM).";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity switching-otn {
+    base switching-capabilities;
+    description
+      "OTN-TDM capable.";
+    reference
+      "RFC 7138: Traffic Engineering Extensions to OSPF for GMPLS
+       Control of Evolving G.709 Optical Transport Networks";
+  }
+
+  identity switching-dcsc {
+    base switching-capabilities;
+    description
+      "Data Channel Switching Capable (DCSC).";
+    reference
+      "RFC 6002: Generalized MPLS (GMPLS) Data Channel
+       Switching Capable (DCSC) and Channel Set Label Extensions";
+  }
+
+  identity switching-lsc {
+    base switching-capabilities;
+    description
+      "Lambda-Switch Capable (LSC).";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity switching-fsc {
+    base switching-capabilities;
+    description
+      "Fiber-Switch Capable (FSC).";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-types {
+    description
+      "Base identity for encoding types.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-packet {
+    base lsp-encoding-types;
+    description
+      "Packet LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-ethernet {
+    base lsp-encoding-types;
+    description
+      "Ethernet LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-pdh {
+    base lsp-encoding-types;
+    description
+      "ANSI/ETSI PDH LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-sdh {
+    base lsp-encoding-types;
+    description
+      "SDH ITU-T G.707 / SONET ANSI T1.105 LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-digital-wrapper {
+    base lsp-encoding-types;
+    description
+      "Digital Wrapper LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-lambda {
+    base lsp-encoding-types;
+    description
+      "Lambda (photonic) LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-fiber {
+    base lsp-encoding-types;
+    description
+      "Fiber LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-fiber-channel {
+    base lsp-encoding-types;
+    description
+      "FiberChannel LSP encoding.";
+    reference
+      "RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Functional Description";
+  }
+
+  identity lsp-encoding-oduk {
+    base lsp-encoding-types;
+    description
+      "G.709 ODUk (Digital Path) LSP encoding.";
+    reference
+      "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Extensions for G.709 Optical Transport Networks
+       Control";
+  }
+
+  identity lsp-encoding-optical-channel {
+    base lsp-encoding-types;
+    description
+      "G.709 Optical Channel LSP encoding.";
+    reference
+      "RFC 4328: Generalized Multi-Protocol Label Switching (GMPLS)
+       Signaling Extensions for G.709 Optical Transport Networks
+       Control";
+  }
+
+  identity lsp-encoding-line {
+    base lsp-encoding-types;
+    description
+      "Line (e.g., 8B/10B) LSP encoding.";
+    reference
+      "RFC 6004: Generalized MPLS (GMPLS) Support for Metro
+       Ethernet Forum and G.8011 Ethernet Service Switching";
+  }
+
+  identity path-signaling-type {
+    description
+      "Base identity from which specific LSP path setup types
+       are derived.";
+  }
+
+  identity path-setup-static {
+    base path-signaling-type;
+    description
+      "Static LSP provisioning path setup.";
+  }
+
+  identity path-setup-rsvp {
+    base path-signaling-type;
+    description
+      "RSVP-TE signaling path setup.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity path-setup-sr {
+    base path-signaling-type;
+    description
+      "Segment-routing path setup.";
+  }
+
+  identity path-scope-type {
+    description
+      "Base identity from which specific path scope types are
+       derived.";
+  }
+
+  identity path-scope-segment {
+    base path-scope-type;
+    description
+      "Path scope segment.";
+    reference
+      "RFC 4873: GMPLS Segment Recovery";
+  }
+
+  identity path-scope-end-to-end {
+    base path-scope-type;
+    description
+      "Path scope end to end.";
+    reference
+      "RFC 4873: GMPLS Segment Recovery";
+  }
+
+  identity route-usage-type {
+    description
+      "Base identity for route usage.";
+  }
+
+  identity route-include-object {
+    base route-usage-type;
+    description
+      "'Include route' object.";
+  }
+
+  identity route-exclude-object {
+    base route-usage-type;
+    description
+      "'Exclude route' object.";
+    reference
+      "RFC 4874: Exclude Routes - Extension to Resource ReserVation
+       Protocol-Traffic Engineering (RSVP-TE)";
+  }
+
+  identity route-exclude-srlg {
+    base route-usage-type;
+    description
+      "Excludes SRLGs.";
+    reference
+      "RFC 4874: Exclude Routes - Extension to Resource ReserVation
+       Protocol-Traffic Engineering (RSVP-TE)";
+  }
+
+  identity path-metric-type {
+    description
+      "Base identity for the path metric type.";
+  }
+
+  identity path-metric-te {
+    base path-metric-type;
+    description
+      "TE path metric.";
+    reference
+      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+       second MPLS Traffic Engineering (TE) Metric";
+  }
+
+  identity path-metric-igp {
+    base path-metric-type;
+    description
+      "IGP path metric.";
+    reference
+      "RFC 3785: Use of Interior Gateway Protocol (IGP) Metric as a
+       second MPLS Traffic Engineering (TE) Metric";
+  }
+
+  identity path-metric-hop {
+    base path-metric-type;
+    description
+      "Hop path metric.";
+  }
+
+  identity path-metric-delay-average {
+    base path-metric-type;
+    description
+      "Average unidirectional link delay.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+  }
+
+  identity path-metric-delay-minimum {
+    base path-metric-type;
+    description
+      "Minimum unidirectional link delay.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+  }
+
+  identity path-metric-residual-bandwidth {
+    base path-metric-type;
+    description
+      "Unidirectional Residual Bandwidth, which is defined to be
+       Maximum Bandwidth (RFC 3630) minus the bandwidth currently
+       allocated to LSPs.";
+    reference
+      "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+       Version 2
+       RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions";
+  }
+
+  identity path-metric-optimize-includes {
+    base path-metric-type;
+    description
+      "A metric that optimizes the number of included resources
+       specified in a set.";
+  }
+
+  identity path-metric-optimize-excludes {
+    base path-metric-type;
+    description
+      "A metric that optimizes to a maximum the number of excluded
+       resources specified in a set.";
+  }
+
+  identity path-tiebreaker-type {
+    description
+      "Base identity for the path tiebreaker type.";
+  }
+
+  identity path-tiebreaker-minfill {
+    base path-tiebreaker-type;
+    description
+      "Min-Fill LSP path placement.";
+  }
+
+  identity path-tiebreaker-maxfill {
+    base path-tiebreaker-type;
+    description
+      "Max-Fill LSP path placement.";
+  }
+
+  identity path-tiebreaker-random {
+    base path-tiebreaker-type;
+    description
+      "Random LSP path placement.";
+  }
+
+  identity resource-affinities-type {
+    description
+      "Base identity for resource class affinities.";
+    reference
+      "RFC 2702: Requirements for Traffic Engineering Over MPLS";
+  }
+
+  identity resource-aff-include-all {
+    base resource-affinities-type;
+    description
+      "The set of attribute filters associated with a
+       tunnel, all of which must be present for a link
+       to be acceptable.";
+    reference
+      "RFC 2702: Requirements for Traffic Engineering Over MPLS
+       RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity resource-aff-include-any {
+    base resource-affinities-type;
+    description
+      "The set of attribute filters associated with a
+       tunnel, any of which must be present for a link
+       to be acceptable.";
+    reference
+      "RFC 2702: Requirements for Traffic Engineering Over MPLS
+       RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity resource-aff-exclude-any {
+    base resource-affinities-type;
+    description
+      "The set of attribute filters associated with a
+       tunnel, any of which renders a link unacceptable.";
+    reference
+      "RFC 2702: Requirements for Traffic Engineering Over MPLS
+       RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity te-optimization-criterion {
+    description
+      "Base identity for the TE optimization criteria.";
+    reference
+      "RFC 3272: Overview and Principles of Internet Traffic
+       Engineering";
+  }
+
+  identity not-optimized {
+    base te-optimization-criterion;
+    description
+      "Optimization is not applied.";
+  }
+
+  identity cost {
+    base te-optimization-criterion;
+    description
+      "Optimized on cost.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity delay {
+    base te-optimization-criterion;
+    description
+      "Optimized on delay.";
+    reference
+      "RFC 5541: Encoding of Objective Functions in the Path
+       Computation Element Communication Protocol (PCEP)";
+  }
+
+  identity path-computation-srlg-type {
+    description
+      "Base identity for SRLG path computation.";
+  }
+
+  identity srlg-ignore {
+    base path-computation-srlg-type;
+    description
+      "Ignores SRLGs in the path computation.";
+  }
+
+  identity srlg-strict {
+    base path-computation-srlg-type;
+    description
+      "Includes a strict SRLG check in the path computation.";
+  }
+
+  identity srlg-preferred {
+    base path-computation-srlg-type;
+    description
+      "Includes a preferred SRLG check in the path computation.";
+  }
+
+  identity srlg-weighted {
+    base path-computation-srlg-type;
+    description
+      "Includes a weighted SRLG check in the path computation.";
+  }
+
+  /**
+   * TE bandwidth groupings
+   **/
+
+  grouping te-bandwidth {
+    description
+      "This grouping defines the generic TE bandwidth.
+       For some known data-plane technologies, specific modeling
+       structures are specified.  The string-encoded 'te-bandwidth'
+       type is used for unspecified technologies.
+       The modeling structure can be augmented later for other
+       technologies.";
+    container te-bandwidth {
+      description
+        "Container that specifies TE bandwidth.  The choices
+         can be augmented for specific data-plane technologies.";
+      choice technology {
+        default "generic";
+        description
+          "Data-plane technology type.";
+        case generic {
+          leaf generic {
+            type te-bandwidth;
+            description
+              "Bandwidth specified in a generic format.";
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * TE label groupings
+   **/
+
+  grouping te-label {
+    description
+      "This grouping defines the generic TE label.
+       The modeling structure can be augmented for each technology.
+       For unspecified technologies, 'rt-types:generalized-label'
+       is used.";
+    container te-label {
+      description
+        "Container that specifies the TE label.  The choices can
+         be augmented for specific data-plane technologies.";
+      choice technology {
+        default "generic";
+        description
+          "Data-plane technology type.";
+        case generic {
+          leaf generic {
+            type rt-types:generalized-label;
+            description
+              "TE label specified in a generic format.";
+          }
+        }
+      }
+      leaf direction {
+        type te-label-direction;
+        default "forward";
+        description
+          "Label direction.";
+      }
+    }
+  }
+
+  grouping te-topology-identifier {
+    description
+      "Augmentation for a TE topology.";
+    container te-topology-identifier {
+      description
+        "TE topology identifier container.";
+      leaf provider-id {
+        type te-global-id;
+        default "0";
+        description
+          "An identifier to uniquely identify a provider.
+           If omitted, it assumes that the topology provider ID
+           value = 0 (the default).";
+      }
+      leaf client-id {
+        type te-global-id;
+        default "0";
+        description
+          "An identifier to uniquely identify a client.
+           If omitted, it assumes that the topology client ID
+           value = 0 (the default).";
+      }
+      leaf topology-id {
+        type te-topology-id;
+        default "";
+        description
+          "When the datastore contains several topologies,
+           'topology-id' distinguishes between them.  If omitted,
+           the default (empty) string for this leaf is assumed.";
+      }
+    }
+  }
+
+  /**
+   * TE performance metrics groupings
+   **/
+
+  grouping performance-metrics-one-way-delay-loss {
+    description
+      "Performance Metrics (PM) information in real time that can
+       be applicable to links or connections.  PM defined in this
+       grouping are applicable to generic TE PM as well as packet TE
+       PM.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+       RFC 7823: Performance-Based Path Selection for Explicitly
+       Routed Label Switched Paths (LSPs) Using TE Metric
+       Extensions
+       RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+    leaf one-way-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      description
+        "One-way delay or latency in microseconds.";
+    }
+    leaf one-way-delay-normality {
+      type te-types:performance-metrics-normality;
+      description
+        "One-way delay normality.";
+    }
+  }
+
+  grouping performance-metrics-two-way-delay-loss {
+    description
+      "PM information in real time that can be applicable to links or
+       connections.  PM defined in this grouping are applicable to
+       generic TE PM as well as packet TE PM.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+       RFC 7823: Performance-Based Path Selection for Explicitly
+       Routed Label Switched Paths (LSPs) Using TE Metric
+       Extensions
+       RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+    leaf two-way-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      description
+        "Two-way delay or latency in microseconds.";
+    }
+    leaf two-way-delay-normality {
+      type te-types:performance-metrics-normality;
+      description
+        "Two-way delay normality.";
+    }
+  }
+
+  grouping performance-metrics-one-way-bandwidth {
+    description
+      "PM information in real time that can be applicable to links.
+       PM defined in this grouping are applicable to generic TE PM
+       as well as packet TE PM.";
+    reference
+      "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+       RFC 7823: Performance-Based Path Selection for Explicitly
+       Routed Label Switched Paths (LSPs) Using TE Metric
+       Extensions
+       RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+    leaf one-way-residual-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Residual bandwidth that subtracts tunnel reservations from
+         Maximum Bandwidth (or link capacity) (RFC 3630) and
+         provides an aggregated remainder across QoS classes.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2";
+    }
+    leaf one-way-residual-bandwidth-normality {
+      type te-types:performance-metrics-normality;
+      default "normal";
+      description
+        "Residual bandwidth normality.";
+    }
+    leaf one-way-available-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Available bandwidth that is defined to be residual
+         bandwidth minus the measured bandwidth used for the
+         actual forwarding of non-RSVP-TE LSP packets.  For a
+         bundled link, available bandwidth is defined to be the
+         sum of the component link available bandwidths.";
+    }
+    leaf one-way-available-bandwidth-normality {
+      type te-types:performance-metrics-normality;
+      default "normal";
+      description
+        "Available bandwidth normality.";
+    }
+    leaf one-way-utilized-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Bandwidth utilization that represents the actual
+         utilization of the link (i.e., as measured in the router).
+         For a bundled link, bandwidth utilization is defined to
+         be the sum of the component link bandwidth utilizations.";
+    }
+    leaf one-way-utilized-bandwidth-normality {
+      type te-types:performance-metrics-normality;
+      default "normal";
+      description
+        "Bandwidth utilization normality.";
+    }
+  }
+
+  grouping one-way-performance-metrics {
+    description
+      "One-way PM throttle grouping.";
+    leaf one-way-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "One-way delay or latency in microseconds.";
+    }
+    leaf one-way-residual-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Residual bandwidth that subtracts tunnel reservations from
+         Maximum Bandwidth (or link capacity) (RFC 3630) and
+         provides an aggregated remainder across QoS classes.";
+      reference
+        "RFC 3630: Traffic Engineering (TE) Extensions to OSPF
+         Version 2";
+    }
+    leaf one-way-available-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Available bandwidth that is defined to be residual
+         bandwidth minus the measured bandwidth used for the
+         actual forwarding of non-RSVP-TE LSP packets.  For a
+         bundled link, available bandwidth is defined to be the
+         sum of the component link available bandwidths.";
+    }
+    leaf one-way-utilized-bandwidth {
+      type rt-types:bandwidth-ieee-float32;
+      units "bytes per second";
+      default "0x0p0";
+      description
+        "Bandwidth utilization that represents the actual
+         utilization of the link (i.e., as measured in the router).
+         For a bundled link, bandwidth utilization is defined to
+         be the sum of the component link bandwidth utilizations.";
+    }
+  }
+
+  grouping two-way-performance-metrics {
+    description
+      "Two-way PM throttle grouping.";
+    leaf two-way-delay {
+      type uint32 {
+        range "0..16777215";
+      }
+      default "0";
+      description
+        "Two-way delay or latency in microseconds.";
+    }
+  }
+
+  grouping performance-metrics-thresholds {
+    description
+      "Grouping for configurable thresholds for measured
+       attributes.";
+    uses one-way-performance-metrics;
+    uses two-way-performance-metrics;
+  }
+
+  grouping performance-metrics-attributes {
+    description
+      "Contains PM attributes.";
+    container performance-metrics-one-way {
+      description
+        "One-way link performance information in real time.";
+      reference
+        "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+         RFC 7823: Performance-Based Path Selection for Explicitly
+         Routed Label Switched Paths (LSPs) Using TE Metric
+         Extensions
+         RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+      uses performance-metrics-one-way-delay-loss;
+      uses performance-metrics-one-way-bandwidth;
+    }
+    container performance-metrics-two-way {
+      description
+        "Two-way link performance information in real time.";
+      reference
+        "RFC 6374: Packet Loss and Delay Measurement for MPLS
+         Networks";
+      uses performance-metrics-two-way-delay-loss;
+    }
+  }
+
+  grouping performance-metrics-throttle-container {
+    description
+      "Controls PM throttling.";
+    container throttle {
+      must 'suppression-interval >= measure-interval' {
+        error-message "'suppression-interval' cannot be less than "
+                    + "'measure-interval'.";
+        description
+          "Constraint on 'suppression-interval' and
+           'measure-interval'.";
+      }
+      description
+        "Link performance information in real time.";
+      reference
+        "RFC 7471: OSPF Traffic Engineering (TE) Metric Extensions
+         RFC 7823: Performance-Based Path Selection for Explicitly
+         Routed Label Switched Paths (LSPs) Using TE Metric
+         Extensions
+         RFC 8570: IS-IS Traffic Engineering (TE) Metric Extensions";
+      leaf one-way-delay-offset {
+        type uint32 {
+          range "0..16777215";
+        }
+        default "0";
+        description
+          "Offset value to be added to the measured delay value.";
+      }
+      leaf measure-interval {
+        type uint32;
+        default "30";
+        description
+          "Interval, in seconds, to measure the extended metric
+           values.";
+      }
+      leaf advertisement-interval {
+        type uint32;
+        default "0";
+        description
+          "Interval, in seconds, to advertise the extended metric
+           values.";
+      }
+      leaf suppression-interval {
+        type uint32 {
+          range "1..max";
+        }
+        default "120";
+        description
+          "Interval, in seconds, to suppress advertisement of the
+           extended metric values.";
+        reference
+          "RFC 8570: IS-IS Traffic Engineering (TE) Metric
+           Extensions, Section 6";
+      }
+      container threshold-out {
+        uses performance-metrics-thresholds;
+        description
+          "If the measured parameter falls outside an upper bound
+           for all but the minimum-delay metric (or a lower bound
+           for the minimum-delay metric only) and the advertised
+           value is not already outside that bound, an 'anomalous'
+           announcement (anomalous bit set) will be triggered.";
+      }
+      container threshold-in {
+        uses performance-metrics-thresholds;
+        description
+          "If the measured parameter falls inside an upper bound
+           for all but the minimum-delay metric (or a lower bound
+           for the minimum-delay metric only) and the advertised
+           value is not already inside that bound, a 'normal'
+           announcement (anomalous bit cleared) will be triggered.";
+      }
+      container threshold-accelerated-advertisement {
+        description
+          "When the difference between the last advertised value and
+           the current measured value exceeds this threshold, an
+           'anomalous' announcement (anomalous bit set) will be
+           triggered.";
+        uses performance-metrics-thresholds;
+      }
+    }
+  }
+
+  /**
+   * TE tunnel generic groupings
+   **/
+
+  grouping explicit-route-hop {
+    description
+      "The explicit route entry grouping.";
+    choice type {
+      description
+        "The explicit route entry type.";
+      case numbered-node-hop {
+        container numbered-node-hop {
+          leaf node-id {
+            type te-node-id;
+            mandatory true;
+            description
+              "The identifier of a node in the TE topology.";
+          }
+          leaf hop-type {
+            type te-hop-type;
+            default "strict";
+            description
+              "Strict or loose hop.";
+          }
+          description
+            "Numbered node route hop.";
+          reference
+            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+             Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+             RFC 3477: Signalling Unnumbered Links in Resource
+             ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+        }
+      }
+      case numbered-link-hop {
+        container numbered-link-hop {
+          leaf link-tp-id {
+            type te-tp-id;
+            mandatory true;
+            description
+              "TE Link Termination Point (LTP) identifier.";
+          }
+          leaf hop-type {
+            type te-hop-type;
+            default "strict";
+            description
+              "Strict or loose hop.";
+          }
+          leaf direction {
+            type te-link-direction;
+            default "outgoing";
+            description
+              "Link route object direction.";
+          }
+          description
+            "Numbered link explicit route hop.";
+          reference
+            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+             Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+             RFC 3477: Signalling Unnumbered Links in Resource
+             ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+        }
+      }
+      case unnumbered-link-hop {
+        container unnumbered-link-hop {
+          leaf link-tp-id {
+            type te-tp-id;
+            mandatory true;
+            description
+              "TE LTP identifier.  The combination of the TE link ID
+               and the TE node ID is used to identify an unnumbered
+               TE link.";
+          }
+          leaf node-id {
+            type te-node-id;
+            mandatory true;
+            description
+              "The identifier of a node in the TE topology.";
+          }
+          leaf hop-type {
+            type te-hop-type;
+            default "strict";
+            description
+              "Strict or loose hop.";
+          }
+          leaf direction {
+            type te-link-direction;
+            default "outgoing";
+            description
+              "Link route object direction.";
+          }
+          description
+            "Unnumbered link explicit route hop.";
+          reference
+            "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
+             Section 4.3, EXPLICIT_ROUTE in RSVP-TE
+             RFC 3477: Signalling Unnumbered Links in Resource
+             ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+        }
+      }
+      case as-number {
+        container as-number-hop {
+          leaf as-number {
+            type inet:as-number;
+            mandatory true;
+            description
+              "The Autonomous System (AS) number.";
+          }
+          leaf hop-type {
+            type te-hop-type;
+            default "strict";
+            description
+              "Strict or loose hop.";
+          }
+          description
+            "AS explicit route hop.";
+        }
+      }
+      case label {
+        container label-hop {
+          description
+            "Label hop type.";
+          uses te-label;
+        }
+        description
+          "The label explicit route hop type.";
+      }
+    }
+  }
+
+  grouping record-route-state {
+    description
+      "The Record Route grouping.";
+    leaf index {
+      type uint32;
+      description
+        "Record Route hop index.  The index is used to
+         identify an entry in the list.  The order of entries
+         is defined by the user without relying on key values.";
+    }
+    choice type {
+      description
+        "The Record Route entry type.";
+      case numbered-node-hop {
+        container numbered-node-hop {
+          description
+            "Numbered node route hop container.";
+          leaf node-id {
+            type te-node-id;
+            mandatory true;
+            description
+              "The identifier of a node in the TE topology.";
+          }
+          leaf-list flags {
+            type path-attribute-flags;
+            description
+              "Path attributes flags.";
+            reference
+              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+               RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+               Tunnels
+               RFC 4561: Definition of a Record Route Object (RRO)
+               Node-Id Sub-Object";
+          }
+        }
+        description
+          "Numbered node route hop.";
+      }
+      case numbered-link-hop {
+        container numbered-link-hop {
+          description
+            "Numbered link route hop container.";
+          leaf link-tp-id {
+            type te-tp-id;
+            mandatory true;
+            description
+              "Numbered TE LTP identifier.";
+          }
+          leaf-list flags {
+            type path-attribute-flags;
+            description
+              "Path attributes flags.";
+            reference
+              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+               RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+               Tunnels
+               RFC 4561: Definition of a Record Route Object (RRO)
+               Node-Id Sub-Object";
+          }
+        }
+        description
+          "Numbered link route hop.";
+      }
+      case unnumbered-link-hop {
+        container unnumbered-link-hop {
+          leaf link-tp-id {
+            type te-tp-id;
+            mandatory true;
+            description
+              "TE LTP identifier.  The combination of the TE link ID
+               and the TE node ID is used to identify an unnumbered
+               TE link.";
+          }
+          leaf node-id {
+            type te-node-id;
+            description
+              "The identifier of a node in the TE topology.";
+          }
+          leaf-list flags {
+            type path-attribute-flags;
+            description
+              "Path attributes flags.";
+            reference
+              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+               RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+               Tunnels
+               RFC 4561: Definition of a Record Route Object (RRO)
+               Node-Id Sub-Object";
+          }
+          description
+            "Unnumbered link Record Route hop.";
+          reference
+            "RFC 3477: Signalling Unnumbered Links in Resource
+             ReSerVation Protocol - Traffic Engineering (RSVP-TE)";
+        }
+        description
+          "Unnumbered link route hop.";
+      }
+      case label {
+        container label-hop {
+          description
+            "Label route hop type.";
+          uses te-label;
+          leaf-list flags {
+            type path-attribute-flags;
+            description
+              "Path attributes flags.";
+            reference
+              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels
+               RFC 4090: Fast Reroute Extensions to RSVP-TE for LSP
+               Tunnels
+               RFC 4561: Definition of a Record Route Object (RRO)
+               Node-Id Sub-Object";
+          }
+        }
+        description
+          "The label Record Route entry types.";
+      }
+    }
+  }
+
+  grouping label-restriction-info {
+    description
+      "Label set item information.";
+    leaf restriction {
+      type enumeration {
+        enum inclusive {
+          description
+            "The label or label range is inclusive.";
+        }
+        enum exclusive {
+          description
+            "The label or label range is exclusive.";
+        }
+      }
+      default "inclusive";
+      description
+        "Indicates whether the list item is inclusive or exclusive.";
+    }
+    leaf index {
+      type uint32;
+      description
+        "The index of the label restriction list entry.";
+    }
+    container label-start {
+      must "(not(../label-end/te-label/direction) and"
+         + " not(te-label/direction))"
+         + " or "
+         + "(../label-end/te-label/direction = te-label/direction)"
+         + " or "
+         + "(not(te-label/direction) and"
+         + " (../label-end/te-label/direction = 'forward'))"
+         + " or "
+         + "(not(../label-end/te-label/direction) and"
+         + " (te-label/direction = 'forward'))" {
+        error-message "'label-start' and 'label-end' must have the "
+                    + "same direction.";
+      }
+      description
+        "This is the starting label if a label range is specified.
+         This is the label value if a single label is specified,
+         in which case the 'label-end' attribute is not set.";
+      uses te-label;
+    }
+    container label-end {
+      must "(not(../label-start/te-label/direction) and"
+         + " not(te-label/direction))"
+         + " or "
+         + "(../label-start/te-label/direction = te-label/direction)"
+         + " or "
+         + "(not(te-label/direction) and"
+         + " (../label-start/te-label/direction = 'forward'))"
+         + " or "
+         + "(not(../label-start/te-label/direction) and"
+         + " (te-label/direction = 'forward'))" {
+        error-message "'label-start' and 'label-end' must have the "
+                    + "same direction.";
+      }
+      description
+        "This is the ending label if a label range is specified.
+         This attribute is not set if a single label is specified.";
+      uses te-label;
+    }
+    container label-step {
+      description
+        "The step increment between labels in the label range.
+         The label start/end values will have to be consistent
+         with the sign of label step.  For example,
+         'label-start' < 'label-end' enforces 'label-step' > 0
+         'label-start' > 'label-end' enforces 'label-step' < 0.";
+      choice technology {
+        default "generic";
+        description
+          "Data-plane technology type.";
+        case generic {
+          leaf generic {
+            type int32;
+            default "1";
+            description
+              "Label range step.";
+          }
+        }
+      }
+    }
+    leaf range-bitmap {
+      type yang:hex-string;
+      description
+        "When there are gaps between 'label-start' and 'label-end',
+         this attribute is used to specify the positions
+         of the used labels.  This is represented in big endian as
+         'hex-string'.
+         The most significant byte in the hex-string is the farthest
+         to the left in the byte sequence.  Leading zero bytes in the
+         configured value may be omitted for brevity.
+         Each bit position in the 'range-bitmap' 'hex-string' maps
+         to a label in the range derived from 'label-start'.
+
+         For example, assuming that 'label-start' = 16000 and
+         'range-bitmap' = 0x01000001, then:
+
+         - bit position (0) is set, and the corresponding mapped
+           label from the range is 16000 + (0 * 'label-step') or
+           16000 for default 'label-step' = 1.
+         - bit position (24) is set, and the corresponding mapped
+           label from the range is 16000 + (24 * 'label-step') or
+           16024 for default 'label-step' = 1.";
+    }
+  }
+
+  grouping label-set-info {
+    description
+      "Grouping for the list of label restrictions specifying what
+       labels may or may not be used.";
+    container label-restrictions {
+      description
+        "The label restrictions container.";
+      list label-restriction {
+        key "index";
+        description
+          "The absence of the label restrictions container implies
+           that all labels are acceptable; otherwise, only restricted
+           labels are available.";
+        reference
+          "RFC 7579: General Network Element Constraint Encoding
+           for GMPLS-Controlled Networks";
+        uses label-restriction-info;
+      }
+    }
+  }
+
+  grouping optimization-metric-entry {
+    description
+      "Optimization metrics configuration grouping.";
+    leaf metric-type {
+      type identityref {
+        base path-metric-type;
+      }
+      description
+        "Identifies the 'metric-type' that the path computation
+         process uses for optimization.";
+    }
+    leaf weight {
+      type uint8;
+      default "1";
+      description
+        "TE path metric normalization weight.";
+    }
+    container explicit-route-exclude-objects {
+      when "../metric-type = "
+         + "'te-types:path-metric-optimize-excludes'";
+      description
+        "Container for the 'exclude route' object list.";
+      uses path-route-exclude-objects;
+    }
+    container explicit-route-include-objects {
+      when "../metric-type = "
+         + "'te-types:path-metric-optimize-includes'";
+      description
+        "Container for the 'include route' object list.";
+      uses path-route-include-objects;
+    }
+  }
+
+  grouping common-constraints {
+    description
+      "Common constraints grouping that can be set on
+       a constraint set or directly on the tunnel.";
+    uses te-bandwidth {
+      description
+        "A requested bandwidth to use for path computation.";
+    }
+    leaf link-protection {
+      type identityref {
+        base link-protection-type;
+      }
+      default "te-types:link-protection-unprotected";
+      description
+        "Link protection type required for the links included
+         in the computed path.";
+      reference
+        "RFC 4202: Routing Extensions in Support of
+         Generalized Multi-Protocol Label Switching (GMPLS)";
+    }
+    leaf setup-priority {
+      type uint8 {
+        range "0..7";
+      }
+      default "7";
+      description
+        "TE LSP requested setup priority.";
+      reference
+        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+    }
+    leaf hold-priority {
+      type uint8 {
+        range "0..7";
+      }
+      default "7";
+      description
+        "TE LSP requested hold priority.";
+      reference
+        "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+    }
+    leaf signaling-type {
+      type identityref {
+        base path-signaling-type;
+      }
+      default "te-types:path-setup-rsvp";
+      description
+        "TE tunnel path signaling type.";
+    }
+  }
+
+  grouping tunnel-constraints {
+    description
+      "Tunnel constraints grouping that can be set on
+       a constraint set or directly on the tunnel.";
+    uses te-topology-identifier;
+    uses common-constraints;
+  }
+
+  grouping path-constraints-route-objects {
+    description
+      "List of route entries to be included or excluded when
+       performing the path computation.";
+    container explicit-route-objects-always {
+      description
+        "Container for the 'exclude route' object list.";
+      list route-object-exclude-always {
+        key "index";
+        ordered-by user;
+        description
+          "List of route objects to always exclude from the path
+           computation.";
+        leaf index {
+          type uint32;
+          description
+            "Explicit Route Object index.  The index is used to
+             identify an entry in the list.  The order of entries
+             is defined by the user without relying on key values.";
+        }
+        uses explicit-route-hop;
+      }
+      list route-object-include-exclude {
+        key "index";
+        ordered-by user;
+        description
+          "List of route objects to include or exclude in the path
+           computation.";
+        leaf explicit-route-usage {
+          type identityref {
+            base route-usage-type;
+          }
+          default "te-types:route-include-object";
+          description
+            "Indicates whether to include or exclude the
+             route object.  The default is to include it.";
+        }
+        leaf index {
+          type uint32;
+          description
+            "Route object include-exclude index.  The index is used
+             to identify an entry in the list.  The order of entries
+             is defined by the user without relying on key values.";
+        }
+        uses explicit-route-hop {
+          augment "type" {
+            case srlg {
+              container srlg {
+                description
+                  "SRLG container.";
+                leaf srlg {
+                  type uint32;
+                  description
+                    "SRLG value.";
+                }
+              }
+              description
+                "An SRLG value to be included or excluded.";
+            }
+            description
+              "Augmentation for a generic explicit route for SRLG
+               exclusion.";
+          }
+        }
+      }
+    }
+  }
+
+  grouping path-route-include-objects {
+    description
+      "List of route objects to be included when performing
+       the path computation.";
+    list route-object-include-object {
+      key "index";
+      ordered-by user;
+      description
+        "List of Explicit Route Objects to be included in the
+         path computation.";
+      leaf index {
+        type uint32;
+        description
+          "Route object entry index.  The index is used to
+           identify an entry in the list.  The order of entries
+           is defined by the user without relying on key values.";
+      }
+      uses explicit-route-hop;
+    }
+  }
+
+  grouping path-route-exclude-objects {
+    description
+      "List of route objects to be excluded when performing
+       the path computation.";
+    list route-object-exclude-object {
+      key "index";
+      ordered-by user;
+      description
+        "List of Explicit Route Objects to be excluded in the
+         path computation.";
+      leaf index {
+        type uint32;
+        description
+          "Route object entry index.  The index is used to
+           identify an entry in the list.  The order of entries
+           is defined by the user without relying on key values.";
+      }
+      uses explicit-route-hop {
+        augment "type" {
+          case srlg {
+            container srlg {
+              description
+                "SRLG container.";
+              leaf srlg {
+                type uint32;
+                description
+                  "SRLG value.";
+              }
+            }
+            description
+              "An SRLG value to be included or excluded.";
+          }
+          description
+            "Augmentation for a generic explicit route for SRLG
+             exclusion.";
+        }
+      }
+    }
+  }
+
+  grouping generic-path-metric-bounds {
+    description
+      "TE path metric bounds grouping.";
+    container path-metric-bounds {
+      description
+        "TE path metric bounds container.";
+      list path-metric-bound {
+        key "metric-type";
+        description
+          "List of TE path metric bounds.";
+        leaf metric-type {
+          type identityref {
+            base path-metric-type;
+          }
+          description
+            "Identifies an entry in the list of 'metric-type' items
+             bound for the TE path.";
+        }
+        leaf upper-bound {
+          type uint64;
+          default "0";
+          description
+            "Upper bound on the end-to-end TE path metric.  A zero
+             indicates an unbounded upper limit for the specific
+             'metric-type'.";
+        }
+      }
+    }
+  }
+
+  grouping generic-path-optimization {
+    description
+      "TE generic path optimization grouping.";
+    container optimizations {
+      description
+        "The objective function container that includes
+         attributes to impose when computing a TE path.";
+      choice algorithm {
+        description
+          "Optimizations algorithm.";
+        case metric {
+          if-feature "path-optimization-metric";
+          /* Optimize by metric */
+          list optimization-metric {
+            key "metric-type";
+            description
+              "TE path metric type.";
+            uses optimization-metric-entry;
+          }
+          /* Tiebreakers */
+          container tiebreakers {
+            description
+              "Container for the list of tiebreakers.";
+            list tiebreaker {
+              key "tiebreaker-type";
+              description
+                "The list of tiebreaker criteria to apply on an
+                 equally favored set of paths, in order to pick
+                 the best.";
+              leaf tiebreaker-type {
+                type identityref {
+                  base path-metric-type;
+                }
+                description
+                  "Identifies an entry in the list of tiebreakers.";
+              }
+            }
+          }
+        }
+        case objective-function {
+          if-feature "path-optimization-objective-function";
+          /* Objective functions */
+          container objective-function {
+            description
+              "The objective function container that includes
+               attributes to impose when computing a TE path.";
+            leaf objective-function-type {
+              type identityref {
+                base objective-function-type;
+              }
+              default "te-types:of-minimize-cost-path";
+              description
+                "Objective function entry.";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping generic-path-affinities {
+    description
+      "Path affinities grouping.";
+    container path-affinities-values {
+      description
+        "Path affinities represented as values.";
+      list path-affinities-value {
+        key "usage";
+        description
+          "List of named affinity constraints.";
+        leaf usage {
+          type identityref {
+            base resource-affinities-type;
+          }
+          description
+            "Identifies an entry in the list of value affinity
+             constraints.";
+        }
+        leaf value {
+          type admin-groups;
+          default "";
+          description
+            "The affinity value.  The default is empty.";
+        }
+      }
+    }
+    container path-affinity-names {
+      description
+        "Path affinities represented as names.";
+      list path-affinity-name {
+        key "usage";
+        description
+          "List of named affinity constraints.";
+        leaf usage {
+          type identityref {
+            base resource-affinities-type;
+          }
+          description
+            "Identifies an entry in the list of named affinity
+             constraints.";
+        }
+        list affinity-name {
+          key "name";
+          leaf name {
+            type string;
+            description
+              "Identifies a named affinity entry.";
+          }
+          description
+            "List of named affinities.";
+        }
+      }
+    }
+  }
+
+  grouping generic-path-srlgs {
+    description
+      "Path SRLG grouping.";
+    container path-srlgs-lists {
+      description
+        "Path SRLG properties container.";
+      list path-srlgs-list {
+        key "usage";
+        description
+          "List of SRLG values to be included or excluded.";
+        leaf usage {
+          type identityref {
+            base route-usage-type;
+          }
+          description
+            "Identifies an entry in a list of SRLGs to either
+             include or exclude.";
+        }
+        leaf-list values {
+          type srlg;
+          description
+            "List of SRLG values.";
+        }
+      }
+    }
+    container path-srlgs-names {
+      description
+        "Container for the list of named SRLGs.";
+      list path-srlgs-name {
+        key "usage";
+        description
+          "List of named SRLGs to be included or excluded.";
+        leaf usage {
+          type identityref {
+            base route-usage-type;
+          }
+          description
+            "Identifies an entry in a list of named SRLGs to either
+             include or exclude.";
+        }
+        leaf-list names {
+          type string;
+          description
+            "List of named SRLGs.";
+        }
+      }
+    }
+  }
+
+  grouping generic-path-disjointness {
+    description
+      "Path disjointness grouping.";
+    leaf disjointness {
+      type te-path-disjointness;
+      description
+        "The type of resource disjointness.
+         When configured for a primary path, the disjointness level
+         applies to all secondary LSPs.  When configured for a
+         secondary path, the disjointness level overrides the level
+         configured for the primary path.";
+    }
+  }
+
+  grouping common-path-constraints-attributes {
+    description
+      "Common path constraints configuration grouping.";
+    uses common-constraints;
+    uses generic-path-metric-bounds;
+    uses generic-path-affinities;
+    uses generic-path-srlgs;
+  }
+
+  grouping generic-path-constraints {
+    description
+      "Global named path constraints configuration grouping.";
+    container path-constraints {
+      description
+        "TE named path constraints container.";
+      uses common-path-constraints-attributes;
+      uses generic-path-disjointness;
+    }
+  }
+
+  grouping generic-path-properties {
+    description
+      "TE generic path properties grouping.";
+    container path-properties {
+      config false;
+      description
+        "The TE path properties.";
+      list path-metric {
+        key "metric-type";
+        description
+          "TE path metric type.";
+        leaf metric-type {
+          type identityref {
+            base path-metric-type;
+          }
+          description
+            "TE path metric type.";
+        }
+        leaf accumulative-value {
+          type uint64;
+          description
+            "TE path metric accumulative value.";
+        }
+      }
+      uses generic-path-affinities;
+      uses generic-path-srlgs;
+      container path-route-objects {
+        description
+          "Container for the list of route objects either returned by
+           the computation engine or actually used by an LSP.";
+        list path-route-object {
+          key "index";
+          ordered-by user;
+          description
+            "List of route objects either returned by the computation
+             engine or actually used by an LSP.";
+          leaf index {
+            type uint32;
+            description
+              "Route object entry index.  The index is used to
+               identify an entry in the list.  The order of entries
+               is defined by the user without relying on key
+               values.";
+          }
+          uses explicit-route-hop;
+        }
+      }
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-service@2023-10-23.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-service@2023-10-23.yang
new file mode 100644
index 0000000000000000000000000000000000000000..f0157bcc82e70d1da523074974e8db061d06c32a
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-service@2023-10-23.yang
@@ -0,0 +1,325 @@
+   module ietf-trans-client-service {
+     /* TODO: FIXME */
+       yang-version 1.1;
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-trans-client-service";
+     prefix "clntsvc";
+
+     import ietf-network {
+       prefix "nw";
+       reference "RFC8345 - A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-network-topology {
+       prefix "nt";
+       reference "RFC8345 - A YANG Data Model for Network Topologies";
+     }
+
+     import ietf-te-types {
+       prefix "te-types";
+       reference "RFC 8776 - Traffic Engineering Common YANG Types";
+     }
+
+     import ietf-layer1-types {
+       prefix "layer1-types";
+       reference "RFC ZZZZ - A YANG Data Model for Layer 1 Types";
+     }
+
+     import ietf-yang-types {
+       prefix "yang";
+       reference "RFC 6991 - Common YANG Data Types";
+     }
+
+    import ietf-trans-client-svc-types {
+      prefix "clntsvc-types";
+      reference "RFC XXXX - A YANG Data Model for
+                 Transport Network Client Signals";
+    }
+
+     organization
+       "Internet Engineering Task Force (IETF) CCAMP WG";
+     contact
+       "
+         ID-draft editor:
+           Haomian Zheng (zhenghaomian@huawei.com);
+           Aihua Guo (aihuaguo.ietf@gmail.com);
+           Italo Busi (italo.busi@huawei.com);
+           Anton Snitser (antons@sedonasys.com);
+           Francesco Lazzeri (francesco.lazzeri@ericsson.com);
+           Yunbin Xu (xuyunbin@caict.ac.cn);
+           Yang Zhao (zhaoyangyjy@chinamobile.com);
+           Xufeng Liu (Xufeng_Liu@jabil.com);
+           Giuseppe Fioccola (giuseppe.fioccola@huawei.com);
+           Chaode Yu (yuchaode@huawei.com);
+       ";
+
+     description
+       "This module defines a YANG data model for describing
+        transport network client services. The model fully conforms
+        to the Network Management Datastore Architecture (NMDA).
+
+        Copyright (c) 2021 IETF Trust and the persons
+        identified as authors of the code.  All rights reserved.
+
+        Redistribution and use in source and binary forms, with or
+        without modification, is permitted pursuant to, and subject
+        to the license terms contained in, the Simplified BSD License
+        set forth in Section 4.c of the IETF Trust's Legal Provisions
+        Relating to IETF Documents
+        (https://trustee.ietf.org/license-info).
+        This version of this YANG module is part of RFC XXXX; see
+        the RFC itself for full legal notices.";
+     revision 2023-10-23 {
+       description
+         "version -04 as a WG document";
+       reference
+         "draft-ietf-ccamp-client-signal-yang";
+     }
+
+     /*
+      * Groupings
+      */
+     grouping client-svc-access-parameters {
+       description
+         "Transport network client signals access parameters";
+
+       leaf access-node-id {
+         type te-types:te-node-id;
+         description
+           "The identifier of the access node in the TE topology.";
+       }
+
+       leaf access-node-uri {
+         type nw:node-id;
+         description
+           "The identifier of the access node in the network.";
+       }
+
+       leaf access-ltp-id {
+         type te-types:te-tp-id;
+         description
+           "The TE link termination point identifier in TE topology, used
+           together with access-node-id to identify the access LTP.";
+       }
+
+       leaf access-ltp-uri {
+         type nt:tp-id;
+         description
+           "The link termination point identifier in network topology,
+           used together with access-node-uri to identify the access LTP";
+       }
+
+       leaf client-signal {
+         type identityref {
+           base layer1-types:client-signal;
+         }
+         description
+           "Identify the client signal type associated with this port";
+       }
+
+     }
+
+     grouping pm-state-grouping {
+       leaf latency {
+         description "latency value of the E2E client signal service";
+         type uint32;
+         units microsecond;
+       }
+     }
+
+     grouping error-info-grouping {
+       leaf error-code {
+         description "error code";
+         type uint16;
+       }
+
+       leaf error-description {
+         description "detail message of error";
+         type string;
+       }
+
+       leaf error-timestamp {
+         description "the date and time error is happened";
+         type yang:date-and-time;
+       }
+     }
+
+     grouping alarm-shreshold-grouping {
+       leaf latency-threshold {
+         description "a threshold for the E2E client signal service's
+         latency. Once the latency value exceed this threshold, an alarm
+         should be triggered.";
+         type uint32;
+         units microsecond;
+       }
+     }
+
+     grouping client-svc-tunnel-parameters {
+       description
+         "Transport network client signals tunnel parameters";
+
+       leaf tunnel-name {
+         type string;
+         description
+           "TE tunnel instance name.";
+       }
+     }
+
+     grouping  client-svc-instance-config {
+       description
+         "Configuration parameters for client services.";
+       leaf client-svc-name {
+         type string;
+         description
+           "Identifier of the p2p transport network client signals.";
+       }
+
+       leaf client-svc-title {
+         type string;
+         description
+           "Name of the p2p transport network client signals.";
+       }
+
+       leaf user-label {
+         type string;
+         description
+           "Alias of the p2p transport network client signals.";
+       }
+
+       leaf client-svc-descr {
+         type string;
+         description
+           "Description of the transport network client signals.";
+       }
+
+       leaf client-svc-customer {
+         type string;
+         description
+           "Customer of the transport network client signals.";
+       }
+
+       container resilience {
+         description "Place holder for resilience functionalities";
+       }
+
+       uses te-types:te-topology-identifier;
+
+       leaf admin-status {
+         type identityref {
+           base te-types:tunnel-admin-state-type;
+         }
+         default te-types:tunnel-admin-state-up;
+         description "Client signals administrative state.";
+       }
+
+       container src-access-ports {
+         description
+           "Source access port of a client signal.";
+         uses client-svc-access-parameters;
+       }
+       container dst-access-ports {
+         description
+           "Destination access port of a client signal.";
+         uses client-svc-access-parameters;
+       }
+
+       container pm-state {
+         config false;
+         description "PM data of E2E client signal";
+         uses pm-state-grouping;
+       }
+
+       container error-info {
+         config false;
+         description "error messages of configuration";
+         uses error-info-grouping;
+       }
+
+       container alarm-shreshold {
+         description "threshold configuration for the E2E client signal";
+         uses alarm-shreshold-grouping;
+       }
+
+       leaf direction {
+         type identityref {
+           base clntsvc-types:direction;
+         }
+         description "Uni-dir or Bi-dir for the client signal.";
+       }
+
+       list svc-tunnels {
+         key tunnel-name;
+         description
+           "List of the TE Tunnels supporting the client signal.";
+         uses client-svc-tunnel-parameters;
+       }
+     }
+
+     grouping  client-svc-instance-state {
+       description
+         "State parameters for client services.";
+       leaf operational-state {
+         type identityref {
+               base te-types:tunnel-state-type;
+         }
+         config false;
+         description "Client signal operational state.";
+       }
+       leaf provisioning-state {
+         type identityref {
+               base te-types:lsp-state-type;
+         }
+         config false;
+         description "Client signal provisioning state.";
+       }
+       leaf creation-time {
+         type yang:date-and-time;
+         config false;
+         description "The time of the client signal be created.";
+       }
+       leaf last-updated-time {
+         type yang:date-and-time;
+         config false;
+         description "The time of the client signal's latest update.";
+       }
+       leaf created-by {
+         type string;
+         config false;
+         description
+           "The client signal is created by whom,
+            can be a system or staff ID.";
+       }
+       leaf last-updated-by {
+         type string;
+         config false;
+         description
+           "The client signal is last updated by whom,
+            can be a system or staff ID.";
+       }
+       leaf owned-by {
+         type string;
+         config false;
+         description
+           "The client signal is owned by whom,
+            can be a system ID.";
+       }
+     }
+
+     /*
+      * Data nodes
+      */
+
+     container client-svc {
+       description
+         "Transport client services.";
+
+       list client-svc-instances {
+         key client-svc-name;
+         description
+           "The list of p2p transport client service instances";
+
+             uses client-svc-instance-config;
+             uses client-svc-instance-state;
+       }
+     }
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-svc-types@2023-10-23.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-svc-types@2023-10-23.yang
new file mode 100644
index 0000000000000000000000000000000000000000..60db5633af691c53678870dc5f087b911726f2c6
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-trans-client-svc-types@2023-10-23.yang
@@ -0,0 +1,63 @@
+   module ietf-trans-client-svc-types {
+     namespace "urn:ietf:params:xml:ns:yang:ietf-trans-client-svc-types";
+     prefix "clntsvc-types";
+
+     organization
+        "Internet Engineering Task Force (IETF) CCAMP WG";
+      contact
+        "
+          ID-draft editor:
+            Haomian Zheng (zhenghaomian@huawei.com);
+            Aihua Guo (aihuaguo.ietf@gmail.com);
+            Italo Busi (italo.busi@huawei.com);
+            Anton Snitser (antons@sedonasys.com);
+            Francesco Lazzeri (francesco.lazzeri@ericsson.com);
+            Yunbin Xu (xuyunbin@caict.ac.cn);
+            Yang Zhao (zhaoyangyjy@chinamobile.com);
+            Xufeng Liu (Xufeng_Liu@jabil.com);
+            Giuseppe Fioccola (giuseppe.fioccola@huawei.com);
+            Chaode Yu (yuchaode@huawei.com);
+        ";
+
+      description
+        "This module defines a YANG data model for describing
+         transport network client types. The model fully conforms
+         to the Network Management Datastore Architecture (NMDA).
+
+         Copyright (c) 2019 IETF Trust and the persons
+         identified as authors of the code.  All rights reserved.
+
+         Redistribution and use in source and binary forms, with or
+         without modification, is permitted pursuant to, and subject
+         to the license terms contained in, the Simplified BSD License
+         set forth in Section 4.c of the IETF Trust's Legal Provisions
+         Relating to IETF Documents
+         (https://trustee.ietf.org/license-info).
+         This version of this YANG module is part of RFC XXXX; see
+         the RFC itself for full legal notices.";
+
+      revision 2023-10-23 {
+        description
+          "version -01 as a WG document";
+        reference
+          "draft-ietf-ccamp-client-signal-yang";
+      }
+
+     identity direction {
+       description
+         "Direction information of Client Signal.";
+     }
+
+     identity bidirectional {
+       base direction;
+       description
+         "Client Signal is bi-directional.";
+     }
+
+     identity unidirectional {
+       base direction;
+       description
+         "Client Signal is uni-directional.";
+     }
+
+   }
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-vpn-common@2022-02-11.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-vpn-common@2022-02-11.yang
new file mode 100644
index 0000000000000000000000000000000000000000..7205a1fdf91869d35795d35df9a44fcf0a365e3f
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-vpn-common@2022-02-11.yang
@@ -0,0 +1,2251 @@
+module ietf-vpn-common {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-vpn-common";
+  prefix vpn-common;
+
+  import ietf-netconf-acm {
+    prefix nacm;
+    reference
+      "RFC 8341: Network Configuration Access Control Model";
+  }
+  import ietf-routing-types {
+    prefix rt-types;
+    reference
+      "RFC 8294: Common YANG Data Types for the Routing Area";
+  }
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types, Section 3";
+  }
+  import ietf-packet-fields {
+    prefix packet-fields;
+    reference
+      "RFC 8519: YANG Data Model for Network Access
+                 Control Lists (ACLs)";
+  }
+
+  organization
+    "IETF OPSAWG (Operations and Management Area Working Group)";
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
+     WG List:  <mailto:opsawg@ietf.org>
+
+     Editor:   Mohamed Boucadair
+               <mailto:mohamed.boucadair@orange.com>
+     Author:   Samier Barguil
+               <mailto:samier.barguilgiraldo.ext@telefonica.com>
+     Editor:   Oscar Gonzalez de Dios
+               <mailto:oscar.gonzalezdedios@telefonica.com>
+     Author:   Qin Wu
+               <mailto:bill.wu@huawei.com>";
+  description
+    "This YANG module defines a common module that is meant
+     to be reused by various VPN-related modules (e.g., the
+     Layer 3 VPN Service Model (L3SM), the Layer 2 VPN Service
+     Model (L2SM), the Layer 3 VPN Network Model (L3NM), and
+     the Layer 2 VPN Network Model (L2NM)).
+
+     Copyright (c) 2022 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Revised BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 9181; see the
+     RFC itself for full legal notices.";
+
+  revision 2022-02-11 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
+                 VPNs";
+  }
+
+  /******** Collection of VPN-related features ********/
+  /*
+   * Features related to encapsulation schemes
+   */
+
+  feature dot1q {
+    description
+      "Indicates support for dot1Q encapsulation.";
+    reference
+      "IEEE Std 802.1Q: IEEE Standard for Local and Metropolitan
+                        Area Networks--Bridges and Bridged
+                        Networks";
+  }
+
+  feature qinq {
+    description
+      "Indicates support for QinQ encapsulation.";
+    reference
+      "IEEE Std 802.1ad: IEEE Standard for Local and Metropolitan
+                         Area Networks---Virtual Bridged Local
+                         Area Networks---Amendment 4: Provider
+                         Bridges";
+  }
+
+  feature vxlan {
+    description
+      "Indicates support for Virtual eXtensible Local Area
+       Network (VXLAN) encapsulation.";
+    reference
+      "RFC 7348: Virtual eXtensible Local Area Network (VXLAN):
+                 A Framework for Overlaying Virtualized Layer 2
+                 Networks over Layer 3 Networks";
+  }
+
+  feature qinany {
+    description
+      "Indicates support for QinAny encapsulation.
+       The outer VLAN tag is set to a specific value, but
+       the inner VLAN tag is set to any.";
+  }
+
+  feature lag-interface {
+    description
+      "Indicates support for Link Aggregation Groups (LAGs)
+       between VPN network accesses.";
+    reference
+      "IEEE Std 802.1AX: IEEE Standard for Local and Metropolitan
+                         Area Networks--Link Aggregation";
+  }
+
+  /*
+   * Features related to multicast
+   */
+
+  feature multicast {
+    description
+      "Indicates support for multicast capabilities in a VPN.";
+    reference
+      "RFC 6513: Multicast in MPLS/BGP IP VPNs";
+  }
+
+  feature igmp {
+    description
+      "Indicates support for the Internet Group Management
+       Protocol (IGMP).";
+    reference
+      "RFC 1112: Host Extensions for IP Multicasting
+       RFC 2236: Internet Group Management Protocol, Version 2
+       RFC 3376: Internet Group Management Protocol, Version 3";
+  }
+
+  feature mld {
+    description
+      "Indicates support for Multicast Listener Discovery (MLD).";
+    reference
+      "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
+       RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
+                 for IPv6";
+  }
+
+  feature pim {
+    description
+      "Indicates support for Protocol Independent Multicast
+       (PIM).";
+    reference
+      "RFC 7761: Protocol Independent Multicast - Sparse Mode
+                 (PIM-SM): Protocol Specification (Revised)";
+  }
+
+  /*
+   * Features related to address family types
+   */
+
+  feature ipv4 {
+    description
+      "Indicates IPv4 support in a VPN.  That is, IPv4 traffic
+       can be carried in the VPN, IPv4 addresses/prefixes can
+       be assigned to a VPN network access, IPv4 routes can be
+       installed for the Customer Edge to Provider Edge (CE-PE)
+       link, etc.";
+    reference
+      "RFC 791: Internet Protocol";
+  }
+
+  feature ipv6 {
+    description
+      "Indicates IPv6 support in a VPN.  That is, IPv6 traffic
+       can be carried in the VPN, IPv6 addresses/prefixes can
+       be assigned to a VPN network access, IPv6 routes can be
+       installed for the CE-PE link, etc.";
+    reference
+      "RFC 8200: Internet Protocol, Version 6 (IPv6)
+                 Specification";
+  }
+
+  /*
+   * Features related to routing protocols
+   */
+
+  feature rtg-ospf {
+    description
+      "Indicates support for OSPF as the Provider Edge to
+       Customer Edge (PE-CE) routing protocol.";
+    reference
+      "RFC 4577: OSPF as the Provider/Customer Edge Protocol
+                 for BGP/MPLS IP Virtual Private Networks (VPNs)
+       RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
+                 (PE-CE) Routing Protocol";
+  }
+
+  feature rtg-ospf-sham-link {
+    description
+      "Indicates support for OSPF sham links.";
+    reference
+      "RFC 4577: OSPF as the Provider/Customer Edge Protocol
+                 for BGP/MPLS IP Virtual Private Networks (VPNs),
+                 Section 4.2.7
+       RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
+                 (PE-CE) Routing Protocol, Section 5";
+  }
+
+  feature rtg-bgp {
+    description
+      "Indicates support for BGP as the PE-CE routing protocol.";
+    reference
+      "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
+  }
+
+  feature rtg-rip {
+    description
+      "Indicates support for RIP as the PE-CE routing protocol.";
+    reference
+      "RFC 2453: RIP Version 2
+       RFC 2080: RIPng for IPv6";
+  }
+
+  feature rtg-isis {
+    description
+      "Indicates support for IS-IS as the PE-CE routing
+       protocol.";
+    reference
+      "ISO10589: Information technology - Telecommunications and
+                 information exchange between systems -
+                 Intermediate System to Intermediate System
+                 intra-domain routeing information exchange
+                 protocol for use in conjunction with the protocol
+                 for providing the connectionless-mode network
+                 service (ISO 8473)";
+  }
+
+  feature rtg-vrrp {
+    description
+      "Indicates support for the Virtual Router Redundancy
+       Protocol (VRRP) in the CE-PE link.";
+    reference
+      "RFC 5798: Virtual Router Redundancy Protocol (VRRP)
+                 Version 3 for IPv4 and IPv6";
+  }
+
+  feature bfd {
+    description
+      "Indicates support for Bidirectional Forwarding Detection
+       (BFD) between the CE and the PE.";
+    reference
+      "RFC 5880: Bidirectional Forwarding Detection (BFD)";
+  }
+
+  /*
+   * Features related to VPN service constraints
+   */
+
+  feature bearer-reference {
+    description
+      "A bearer refers to properties of the CE-PE attachment that
+       are below Layer 3.
+       This feature indicates support for the bearer reference
+       access constraint, i.e., the reuse of a network connection
+       that was already ordered to the service provider apart from
+       the IP VPN site.";
+  }
+
+  feature placement-diversity {
+    description
+      "Indicates support for placement diversity constraints in
+       the customer premises.  An example of these constraints
+       may be to avoid connecting a site network access to the
+       same PE as a target site network access.";
+  }
+
+  /*
+   * Features related to bandwidth and Quality of Service (QoS)
+   */
+
+  feature qos {
+    description
+      "Indicates support for Classes of Service (CoSes) in
+       the VPN.";
+  }
+
+  feature inbound-bw {
+    description
+      "Indicates support for the inbound bandwidth in a VPN,
+       i.e., support for specifying the download bandwidth from
+       the service provider network to the VPN site.  Note that
+       the L3SM uses 'input' to identify the same feature.
+       That terminology should be deprecated in favor of
+       the terminology defined in this module.";
+  }
+
+  feature outbound-bw {
+    description
+      "Indicates support for the outbound bandwidth in a VPN,
+       i.e., support for specifying the upload bandwidth from
+       the VPN site to the service provider network.  Note that
+       the L3SM uses 'output' to identify the same feature.
+       That terminology should be deprecated in favor of the
+       terminology defined in this module.";
+  }
+
+  /*
+   * Features related to security and resilience
+   */
+
+  feature encryption {
+    description
+      "Indicates support for encryption in the VPN.";
+  }
+
+  feature fast-reroute {
+    description
+      "Indicates support for Fast Reroute (FRR) capabilities for
+       a VPN site.";
+  }
+
+  /*
+   * Features related to advanced VPN options
+   */
+
+  feature external-connectivity {
+    description
+      "Indicates support for the VPN to provide external
+       connectivity (e.g., Internet, private or public cloud).";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks
+                 (VPNs), Section 11";
+  }
+
+  feature extranet-vpn {
+    description
+      "Indicates support for extranet VPNs, i.e., the capability
+       of a VPN to access a list of other VPNs.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks
+                 (VPNs), Section 1.1";
+  }
+
+  feature carriers-carrier {
+    description
+      "Indicates support for Carriers' Carriers in VPNs.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks
+                 (VPNs), Section 9";
+  }
+
+  /*
+   * Identities related to address families
+   */
+
+  identity address-family {
+    description
+      "Defines a type for the address family.";
+  }
+
+  identity ipv4 {
+    base address-family;
+    description
+      "Identity for an IPv4 address family.";
+  }
+
+  identity ipv6 {
+    base address-family;
+    description
+      "Identity for an IPv6 address family.";
+  }
+
+  identity dual-stack {
+    base address-family;
+    description
+      "Identity for IPv4 and IPv6 address families.";
+  }
+
+  /*
+   * Identities related to VPN topology
+   */
+
+  identity vpn-topology {
+    description
+      "Base identity of the VPN topology.";
+  }
+
+  identity any-to-any {
+    base vpn-topology;
+    description
+      "Identity for any-to-any VPN topology.  All VPN sites
+       can communicate with each other without any restrictions.";
+  }
+
+  identity hub-spoke {
+    base vpn-topology;
+    description
+      "Identity for Hub-and-Spoke VPN topology.  All Spokes can
+       communicate with Hubs only and not with each other.  Hubs
+       can communicate with each other.";
+  }
+
+  identity hub-spoke-disjoint {
+    base vpn-topology;
+    description
+      "Identity for Hub-and-Spoke VPN topology where Hubs cannot
+       communicate with each other.";
+  }
+
+  identity custom {
+    base vpn-topology;
+    description
+      "Identity for custom VPN topologies where the role of the
+       nodes is not strictly Hub or Spoke.  The VPN topology is
+       controlled by the import/export policies.  The custom
+       topology reflects more complex VPN nodes, such as a
+       VPN node that acts as a Hub for certain nodes and a Spoke
+       for others.";
+  }
+
+  /*
+   * Identities related to network access types
+   */
+
+  identity site-network-access-type {
+    description
+      "Base identity for site network access types.";
+  }
+
+  identity point-to-point {
+    base site-network-access-type;
+    description
+      "Point-to-point access type.";
+  }
+
+  identity multipoint {
+    base site-network-access-type;
+    description
+      "Multipoint access type.";
+  }
+
+  identity irb {
+    base site-network-access-type;
+    description
+      "Integrated Routing and Bridging (IRB).
+       Identity for pseudowire connections.";
+  }
+
+  identity loopback {
+    base site-network-access-type;
+    description
+      "Loopback access type.";
+  }
+
+  /*
+   * Identities related to operational and administrative status
+   */
+
+  identity operational-status {
+    description
+      "Base identity for operational status.";
+  }
+
+  identity op-up {
+    base operational-status;
+    description
+      "Operational status is Up/Enabled.";
+  }
+
+  identity op-down {
+    base operational-status;
+    description
+      "Operational status is Down/Disabled.";
+  }
+
+  identity op-unknown {
+    base operational-status;
+    description
+      "Operational status is Unknown.";
+  }
+
+  identity administrative-status {
+    description
+      "Base identity for administrative status.";
+  }
+
+  identity admin-up {
+    base administrative-status;
+    description
+      "Administrative status is Up/Enabled.";
+  }
+
+  identity admin-down {
+    base administrative-status;
+    description
+      "Administrative status is Down/Disabled.";
+  }
+
+  identity admin-testing {
+    base administrative-status;
+    description
+      "Administrative status is Up for testing purposes.";
+  }
+
+  identity admin-pre-deployment {
+    base administrative-status;
+    description
+      "Administrative status reflects a pre-deployment phase,
+       i.e., prior to the actual deployment of a service.";
+  }
+
+  /*
+   * Identities related to site or node roles
+   */
+
+  identity role {
+    description
+      "Base identity of a site or node role.";
+  }
+
+  identity any-to-any-role {
+    base role;
+    description
+      "Any-to-any role.";
+  }
+
+  identity spoke-role {
+    base role;
+    description
+      "A node or a site is acting as a Spoke.";
+  }
+
+  identity hub-role {
+    base role;
+    description
+      "A node or a site is acting as a Hub.";
+  }
+
+  identity custom-role {
+    base role;
+    description
+      "VPN node with a custom or complex role in the VPN.  For
+       some sources/destinations, it can behave as a Hub, but for
+       others, it can act as a Spoke, depending on the configured
+       policy.";
+  }
+
+  /*
+   * Identities related to VPN service constraints
+   */
+
+  identity placement-diversity {
+    description
+      "Base identity for access placement constraints.";
+  }
+
+  identity bearer-diverse {
+    base placement-diversity;
+    description
+      "Bearer diversity.
+
+       The bearers should not use common elements.";
+  }
+
+  identity pe-diverse {
+    base placement-diversity;
+    description
+      "PE diversity.";
+  }
+
+  identity pop-diverse {
+    base placement-diversity;
+    description
+      "Point of Presence (POP) diversity.";
+  }
+
+  identity linecard-diverse {
+    base placement-diversity;
+    description
+      "Linecard diversity.";
+  }
+
+  identity same-pe {
+    base placement-diversity;
+    description
+      "Having sites connected on the same PE.";
+  }
+
+  identity same-bearer {
+    base placement-diversity;
+    description
+      "Having sites connected using the same bearer.";
+  }
+
+  /*
+   * Identities related to service types
+   */
+
+  identity service-type {
+    description
+      "Base identity for service types.";
+  }
+
+  identity l3vpn {
+    base service-type;
+    description
+      "L3VPN service.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)";
+  }
+
+  identity vpls {
+    base service-type;
+    description
+      "Virtual Private LAN Service (VPLS).";
+    reference
+      "RFC 4761: Virtual Private LAN Service (VPLS) Using BGP for
+                 Auto-Discovery and Signaling
+       RFC 4762: Virtual Private LAN Service (VPLS) Using Label
+                 Distribution Protocol (LDP) Signaling";
+  }
+
+  identity vpws {
+    base service-type;
+    description
+      "Virtual Private Wire Service (VPWS).";
+    reference
+      "RFC 4664: Framework for Layer 2 Virtual Private Networks
+                 (L2VPNs), Section 3.1.1";
+  }
+
+  identity vpws-evpn {
+    base service-type;
+    description
+      "Ethernet VPN (EVPN) used to support VPWS.";
+    reference
+      "RFC 8214: Virtual Private Wire Service Support in
+                 Ethernet VPN";
+  }
+
+  identity pbb-evpn {
+    base service-type;
+    description
+      "Provider Backbone Bridging (PBB) EVPN service.";
+    reference
+      "RFC 7623: Provider Backbone Bridging Combined with
+                 Ethernet VPN (PBB-EVPN)";
+  }
+
+  identity mpls-evpn {
+    base service-type;
+    description
+      "MPLS-based EVPN service.";
+    reference
+      "RFC 7432: BGP MPLS-Based Ethernet VPN";
+  }
+
+  identity vxlan-evpn {
+    base service-type;
+    description
+      "VXLAN-based EVPN service.";
+    reference
+      "RFC 8365: A Network Virtualization Overlay Solution Using
+                 Ethernet VPN (EVPN)";
+  }
+
+  /*
+   * Identities related to VPN signaling types
+   */
+
+  identity vpn-signaling-type {
+    description
+      "Base identity for VPN signaling types.";
+  }
+
+  identity bgp-signaling {
+    base vpn-signaling-type;
+    description
+      "Layer 2 VPNs using BGP signaling.";
+    reference
+      "RFC 6624: Layer 2 Virtual Private Networks Using BGP for
+                 Auto-Discovery and Signaling
+       RFC 7432: BGP MPLS-Based Ethernet VPN";
+  }
+
+  identity ldp-signaling {
+    base vpn-signaling-type;
+    description
+      "Targeted Label Distribution Protocol (LDP) signaling.";
+    reference
+      "RFC 5036: LDP Specification";
+  }
+
+  identity l2tp-signaling {
+    base vpn-signaling-type;
+    description
+      "Layer Two Tunneling Protocol (L2TP) signaling.";
+    reference
+      "RFC 3931: Layer Two Tunneling Protocol - Version 3 (L2TPv3)";
+  }
+
+  /*
+   * Identities related to routing protocols
+   */
+
+  identity routing-protocol-type {
+    description
+      "Base identity for routing protocol types.";
+  }
+
+  identity static-routing {
+    base routing-protocol-type;
+    description
+      "Static routing protocol.";
+  }
+
+  identity bgp-routing {
+    if-feature "rtg-bgp";
+    base routing-protocol-type;
+    description
+      "BGP routing protocol.";
+    reference
+      "RFC 4271: A Border Gateway Protocol 4 (BGP-4)";
+  }
+
+  identity ospf-routing {
+    if-feature "rtg-ospf";
+    base routing-protocol-type;
+    description
+      "OSPF routing protocol.";
+    reference
+      "RFC 4577: OSPF as the Provider/Customer Edge Protocol
+                 for BGP/MPLS IP Virtual Private Networks (VPNs)
+       RFC 6565: OSPFv3 as a Provider Edge to Customer Edge
+                 (PE-CE) Routing Protocol";
+  }
+
+  identity rip-routing {
+    if-feature "rtg-rip";
+    base routing-protocol-type;
+    description
+      "RIP routing protocol.";
+    reference
+      "RFC 2453: RIP Version 2
+       RFC 2080: RIPng for IPv6";
+  }
+
+  identity isis-routing {
+    if-feature "rtg-isis";
+    base routing-protocol-type;
+    description
+      "IS-IS routing protocol.";
+    reference
+      "ISO10589: Information technology - Telecommunications and
+                 information exchange between systems -
+                 Intermediate System to Intermediate System
+                 intra-domain routeing information exchange
+                 protocol for use in conjunction with the protocol
+                 for providing the connectionless-mode network
+                 service (ISO 8473)";
+  }
+
+  identity vrrp-routing {
+    if-feature "rtg-vrrp";
+    base routing-protocol-type;
+    description
+      "VRRP protocol.
+
+       This is to be used when LANs are directly connected to
+       PEs.";
+    reference
+      "RFC 5798: Virtual Router Redundancy Protocol (VRRP)
+                 Version 3 for IPv4 and IPv6";
+  }
+
+  identity direct-routing {
+    base routing-protocol-type;
+    description
+      "Direct routing.
+
+       This is to be used when LANs are directly connected to PEs
+       and must be advertised in the VPN.";
+  }
+
+  identity any-routing {
+    base routing-protocol-type;
+    description
+      "Any routing protocol.
+
+       For example, this can be used to set policies that apply
+       to any routing protocol in place.";
+  }
+
+  identity isis-level {
+    if-feature "rtg-isis";
+    description
+      "Base identity for the IS-IS level.";
+    reference
+      "ISO10589: Information technology - Telecommunications and
+                 information exchange between systems -
+                 Intermediate System to Intermediate System
+                 intra-domain routeing information exchange
+                 protocol for use in conjunction with the protocol
+                 for providing the connectionless-mode network
+                 service (ISO 8473)";
+  }
+
+  identity level-1 {
+    base isis-level;
+    description
+      "IS-IS Level 1.";
+  }
+
+  identity level-2 {
+    base isis-level;
+    description
+      "IS-IS Level 2.";
+  }
+
+  identity level-1-2 {
+    base isis-level;
+    description
+      "IS-IS Levels 1 and 2.";
+  }
+
+  identity bfd-session-type {
+    if-feature "bfd";
+    description
+      "Base identity for the BFD session type.";
+  }
+
+  identity classic-bfd {
+    base bfd-session-type;
+    description
+      "Classic BFD.";
+    reference
+      "RFC 5880: Bidirectional Forwarding Detection (BFD)";
+  }
+
+  identity s-bfd {
+    base bfd-session-type;
+    description
+      "Seamless BFD.";
+    reference
+      "RFC 7880: Seamless Bidirectional Forwarding Detection
+                 (S-BFD)";
+  }
+
+  /*
+   * Identities related to route import and export policies
+   */
+
+  identity ie-type {
+    description
+      "Base identity for import/export routing profiles.
+       These profiles can be reused between VPN nodes.";
+  }
+
+  identity import {
+    base ie-type;
+    description
+      "Import routing profile.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks
+                 (VPNs), Section 4.3.1";
+  }
+
+  identity export {
+    base ie-type;
+    description
+      "Export routing profile.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks
+                 (VPNs), Section 4.3.1";
+  }
+
+  identity import-export {
+    base ie-type;
+    description
+      "Import/export routing profile.";
+  }
+
+  /*
+   * Identities related to bandwidth and QoS
+   */
+
+  identity bw-direction {
+    description
+      "Base identity for the bandwidth direction.";
+  }
+
+  identity inbound-bw {
+    if-feature "inbound-bw";
+    base bw-direction;
+    description
+      "Inbound bandwidth.";
+  }
+
+  identity outbound-bw {
+    if-feature "outbound-bw";
+    base bw-direction;
+    description
+      "Outbound bandwidth.";
+  }
+
+  identity bw-type {
+    description
+      "Base identity for the bandwidth type.";
+  }
+
+  identity bw-per-cos {
+    if-feature "qos";
+    base bw-type;
+    description
+      "The bandwidth is per CoS.";
+  }
+
+  identity bw-per-port {
+    base bw-type;
+    description
+      "The bandwidth is per a given site network access.";
+  }
+
+  identity bw-per-site {
+    base bw-type;
+    description
+      "The bandwidth is per site.  It is applicable to all the
+       site network accesses within a site.";
+  }
+
+  identity bw-per-service {
+    base bw-type;
+    description
+      "The bandwidth is per VPN service.";
+  }
+
+  identity qos-profile-direction {
+    if-feature "qos";
+    description
+      "Base identity for the QoS profile direction.";
+  }
+
+  identity site-to-wan {
+    base qos-profile-direction;
+    description
+      "From the customer site to the provider's network.
+       This is typically the CE-to-PE direction.";
+  }
+
+  identity wan-to-site {
+    base qos-profile-direction;
+    description
+      "From the provider's network to the customer site.
+       This is typically the PE-to-CE direction.";
+  }
+
+  identity both {
+    base qos-profile-direction;
+    description
+      "Both the WAN-to-site direction and the site-to-WAN
+       direction.";
+  }
+
+  /*
+   * Identities related to underlay transport instances
+   */
+
+  identity transport-instance-type {
+    description
+      "Base identity for underlay transport instance types.";
+  }
+
+  identity virtual-network {
+    base transport-instance-type;
+    description
+      "Virtual network.";
+    reference
+      "RFC 8453: Framework for Abstraction and Control of TE
+                 Networks (ACTN)";
+  }
+
+  identity enhanced-vpn {
+    base transport-instance-type;
+    description
+      "Enhanced VPN (VPN+).  VPN+ is an approach that is
+       based on existing VPN and Traffic Engineering (TE)
+       technologies but adds characteristics that specific
+       services require over and above classical VPNs.";
+    reference
+      "draft-ietf-teas-enhanced-vpn-09:
+         A Framework for Enhanced Virtual Private Network
+         (VPN+) Services";
+  }
+
+  identity ietf-network-slice {
+    base transport-instance-type;
+    description
+      "IETF network slice.  An IETF network slice
+       is a logical network topology connecting a number of
+       endpoints using a set of shared or dedicated network
+       resources that are used to satisfy specific service
+       objectives.";
+    reference
+      "draft-ietf-teas-ietf-network-slices-05:
+         Framework for IETF Network Slices";
+  }
+
+  /*
+   * Identities related to protocol types.  These types are
+   * typically used to identify the underlay transport.
+   */
+
+  identity protocol-type {
+    description
+      "Base identity for protocol types.";
+  }
+
+  identity ip-in-ip {
+    base protocol-type;
+    description
+      "Transport is based on IP in IP.";
+    reference
+      "RFC 2003: IP Encapsulation within IP
+       RFC 2473: Generic Packet Tunneling in IPv6 Specification";
+  }
+
+  identity ip-in-ipv4 {
+    base ip-in-ip;
+    description
+      "Transport is based on IP over IPv4.";
+    reference
+      "RFC 2003: IP Encapsulation within IP";
+  }
+
+  identity ip-in-ipv6 {
+    base ip-in-ip;
+    description
+      "Transport is based on IP over IPv6.";
+    reference
+      "RFC 2473: Generic Packet Tunneling in IPv6 Specification";
+  }
+
+  identity gre {
+    base protocol-type;
+    description
+      "Transport is based on Generic Routing Encapsulation
+       (GRE).";
+    reference
+      "RFC 1701: Generic Routing Encapsulation (GRE)
+       RFC 1702: Generic Routing Encapsulation over IPv4 networks
+       RFC 7676: IPv6 Support for Generic Routing Encapsulation
+                 (GRE)";
+  }
+
+  identity gre-v4 {
+    base gre;
+    description
+      "Transport is based on GRE over IPv4.";
+    reference
+      "RFC 1702: Generic Routing Encapsulation over IPv4
+                 networks";
+  }
+
+  identity gre-v6 {
+    base gre;
+    description
+      "Transport is based on GRE over IPv6.";
+    reference
+      "RFC 7676: IPv6 Support for Generic Routing Encapsulation
+                 (GRE)";
+  }
+
+  identity vxlan-trans {
+    base protocol-type;
+    description
+      "Transport is based on VXLANs.";
+    reference
+      "RFC 7348: Virtual eXtensible Local Area Network (VXLAN):
+                 A Framework for Overlaying Virtualized Layer 2
+                 Networks over Layer 3 Networks";
+  }
+
+  identity geneve {
+    base protocol-type;
+    description
+      "Transport is based on Generic Network Virtualization
+       Encapsulation (Geneve).";
+    reference
+      "RFC 8926: Geneve: Generic Network Virtualization
+                 Encapsulation";
+  }
+
+  identity ldp {
+    base protocol-type;
+    description
+      "Transport is based on LDP.";
+    reference
+      "RFC 5036: LDP Specification";
+  }
+
+  identity mpls-in-udp {
+    base protocol-type;
+    description
+      "Transport is based on MPLS in UDP.";
+    reference
+      "RFC 7510: Encapsulating MPLS in UDP";
+  }
+
+  identity sr {
+    base protocol-type;
+    description
+      "Transport is based on Segment Routing (SR).";
+    reference
+      "RFC 8660: Segment Routing with the MPLS Data Plane
+       RFC 8663: MPLS Segment Routing over IP
+       RFC 8754: IPv6 Segment Routing Header (SRH)";
+  }
+
+  identity sr-mpls {
+    base sr;
+    description
+      "Transport is based on SR with the MPLS data plane.";
+    reference
+      "RFC 8660: Segment Routing with the MPLS Data Plane";
+  }
+
+  identity srv6 {
+    base sr;
+    description
+      "Transport is based on SR over IPv6.";
+    reference
+      "RFC 8754: IPv6 Segment Routing Header (SRH)";
+  }
+
+  identity sr-mpls-over-ip {
+    base sr;
+    description
+      "Transport is based on SR over MPLS over IP.";
+    reference
+      "RFC 8663: MPLS Segment Routing over IP";
+  }
+
+  identity rsvp-te {
+    base protocol-type;
+    description
+      "Transport setup relies upon RSVP-TE.";
+    reference
+      "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
+  }
+
+  identity bgp-lu {
+    base protocol-type;
+    description
+      "Transport setup relies upon BGP-based labeled prefixes.";
+    reference
+      "RFC 8277: Using BGP to Bind MPLS Labels to Address Prefixes";
+  }
+
+  identity unknown {
+    base protocol-type;
+    description
+      "Unknown protocol type.";
+  }
+
+  /*
+   * Identities related to encapsulation types
+   */
+
+  identity encapsulation-type {
+    description
+      "Base identity for encapsulation types.";
+  }
+
+  identity priority-tagged {
+    base encapsulation-type;
+    description
+      "Priority-tagged interface.";
+  }
+
+  identity dot1q {
+    if-feature "dot1q";
+    base encapsulation-type;
+    description
+      "dot1Q encapsulation.";
+  }
+
+  identity qinq {
+    if-feature "qinq";
+    base encapsulation-type;
+    description
+      "QinQ encapsulation.";
+  }
+
+  identity qinany {
+    if-feature "qinany";
+    base encapsulation-type;
+    description
+      "QinAny encapsulation.";
+  }
+
+  identity vxlan {
+    if-feature "vxlan";
+    base encapsulation-type;
+    description
+      "VXLAN encapsulation.";
+  }
+
+  identity ethernet-type {
+    base encapsulation-type;
+    description
+      "Ethernet encapsulation type.";
+  }
+
+  identity vlan-type {
+    base encapsulation-type;
+    description
+      "VLAN encapsulation type.";
+  }
+
+  identity untagged-int {
+    base encapsulation-type;
+    description
+      "Untagged interface type.";
+  }
+
+  identity tagged-int {
+    base encapsulation-type;
+    description
+      "Tagged interface type.";
+  }
+
+  identity lag-int {
+    if-feature "lag-interface";
+    base encapsulation-type;
+    description
+      "LAG interface type.";
+  }
+
+  /*
+   * Identities related to VLAN tags
+   */
+
+  identity tag-type {
+    description
+      "Base identity for VLAN tag types.";
+  }
+
+  identity c-vlan {
+    base tag-type;
+    description
+      "Indicates a Customer VLAN (C-VLAN) tag, normally using
+       the 0x8100 Ethertype.";
+  }
+
+  identity s-vlan {
+    base tag-type;
+    description
+      "Indicates a Service VLAN (S-VLAN) tag.";
+  }
+
+  identity s-c-vlan {
+    base tag-type;
+    description
+      "Uses both an S-VLAN tag and a C-VLAN tag.";
+  }
+
+  /*
+   * Identities related to VXLANs
+   */
+
+  identity vxlan-peer-mode {
+    if-feature "vxlan";
+    description
+      "Base identity for VXLAN peer modes.";
+  }
+
+  identity static-mode {
+    base vxlan-peer-mode;
+    description
+      "VXLAN access in the static mode.";
+  }
+
+  identity bgp-mode {
+    base vxlan-peer-mode;
+    description
+      "VXLAN access by BGP EVPN learning.";
+  }
+
+  /*
+   * Identities related to multicast
+   */
+
+  identity multicast-gp-address-mapping {
+    if-feature "multicast";
+    description
+      "Base identity for multicast group mapping types.";
+  }
+
+  identity static-mapping {
+    base multicast-gp-address-mapping;
+    description
+      "Static mapping, i.e., an interface is attached to the
+       multicast group as a static member.";
+  }
+
+  identity dynamic-mapping {
+    base multicast-gp-address-mapping;
+    description
+      "Dynamic mapping, i.e., an interface is added to the
+       multicast group as a result of snooping.";
+  }
+
+  identity multicast-tree-type {
+    if-feature "multicast";
+    description
+      "Base identity for multicast tree types.";
+  }
+
+  identity ssm-tree-type {
+    base multicast-tree-type;
+    description
+      "Source-Specific Multicast (SSM) tree type.";
+  }
+
+  identity asm-tree-type {
+    base multicast-tree-type;
+    description
+      "Any-Source Multicast (ASM) tree type.";
+  }
+
+  identity bidir-tree-type {
+    base multicast-tree-type;
+    description
+      "Bidirectional tree type.";
+  }
+
+  identity multicast-rp-discovery-type {
+    if-feature "multicast";
+    description
+      "Base identity for Rendezvous Point (RP) discovery types.";
+  }
+
+  identity auto-rp {
+    base multicast-rp-discovery-type;
+    description
+      "Auto-RP discovery type.";
+  }
+
+  identity static-rp {
+    base multicast-rp-discovery-type;
+    description
+      "Static type.";
+  }
+
+  identity bsr-rp {
+    base multicast-rp-discovery-type;
+    description
+      "Bootstrap Router (BSR) discovery type.";
+  }
+
+  identity group-management-protocol {
+    if-feature "multicast";
+    description
+      "Base identity for multicast group management protocols.";
+  }
+
+  identity igmp-proto {
+    base group-management-protocol;
+    description
+      "IGMP.";
+    reference
+      "RFC 1112: Host Extensions for IP Multicasting
+       RFC 2236: Internet Group Management Protocol, Version 2
+       RFC 3376: Internet Group Management Protocol, Version 3";
+  }
+
+  identity mld-proto {
+    base group-management-protocol;
+    description
+      "MLD.";
+    reference
+      "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
+       RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
+                 for IPv6";
+  }
+
+  identity pim-proto {
+    if-feature "pim";
+    base routing-protocol-type;
+    description
+      "PIM.";
+    reference
+      "RFC 7761: Protocol Independent Multicast - Sparse Mode
+                 (PIM-SM): Protocol Specification (Revised)";
+  }
+
+  identity igmp-version {
+    if-feature "igmp";
+    description
+      "Base identity for indicating the IGMP version.";
+  }
+
+  identity igmpv1 {
+    base igmp-version;
+    description
+      "IGMPv1.";
+    reference
+      "RFC 1112: Host Extensions for IP Multicasting";
+  }
+
+  identity igmpv2 {
+    base igmp-version;
+    description
+      "IGMPv2.";
+    reference
+      "RFC 2236: Internet Group Management Protocol, Version 2";
+  }
+
+  identity igmpv3 {
+    base igmp-version;
+    description
+      "IGMPv3.";
+    reference
+      "RFC 3376: Internet Group Management Protocol, Version 3";
+  }
+
+  identity mld-version {
+    if-feature "mld";
+    description
+      "Base identity for indicating the MLD version.";
+  }
+
+  identity mldv1 {
+    base mld-version;
+    description
+      "MLDv1.";
+    reference
+      "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity mldv2 {
+    base mld-version;
+    description
+      "MLDv2.";
+    reference
+      "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
+                 for IPv6";
+  }
+
+  /*
+   * Identities related to traffic types
+   */
+
+  identity tf-type {
+    description
+      "Base identity for traffic types.";
+  }
+
+  identity multicast-traffic {
+    base tf-type;
+    description
+      "Multicast traffic.";
+  }
+
+  identity broadcast-traffic {
+    base tf-type;
+    description
+      "Broadcast traffic.";
+  }
+
+  identity unknown-unicast-traffic {
+    base tf-type;
+    description
+      "Unknown unicast traffic.";
+  }
+
+  /*
+   * Identities related to customer applications
+   */
+
+  identity customer-application {
+    description
+      "Base identity for customer applications.";
+  }
+
+  identity web {
+    base customer-application;
+    description
+      "Web applications (e.g., HTTP, HTTPS).";
+  }
+
+  identity mail {
+    base customer-application;
+    description
+      "Mail application.";
+  }
+
+  identity file-transfer {
+    base customer-application;
+    description
+      "File transfer application (e.g., FTP, Secure FTP (SFTP)).";
+  }
+
+  identity database {
+    base customer-application;
+    description
+      "Database application.";
+  }
+
+  identity social {
+    base customer-application;
+    description
+      "Social-network application.";
+  }
+
+  identity games {
+    base customer-application;
+    description
+      "Gaming application.";
+  }
+
+  identity p2p {
+    base customer-application;
+    description
+      "Peer-to-peer application.";
+  }
+
+  identity network-management {
+    base customer-application;
+    description
+      "Management application (e.g., Telnet, syslog, SNMP).";
+  }
+
+  identity voice {
+    base customer-application;
+    description
+      "Voice application.";
+  }
+
+  identity video {
+    base customer-application;
+    description
+      "Video-conference application.";
+  }
+
+  identity embb {
+    base customer-application;
+    description
+      "Enhanced Mobile Broadband (eMBB) application.
+       Note that eMBB applications demand network performance
+       with a wide variety of such characteristics as data rate,
+       latency, loss rate, reliability, and many other
+       parameters.";
+  }
+
+  identity urllc {
+    base customer-application;
+    description
+      "Ultra-Reliable and Low Latency Communications (URLLC)
+       application.  Note that URLLC applications demand
+       network performance with a wide variety of such
+       characteristics as latency, reliability, and many other
+       parameters.";
+  }
+
+  identity mmtc {
+    base customer-application;
+    description
+      "Massive Machine Type Communications (mMTC) application.
+       Note that mMTC applications demand network performance
+       with a wide variety of such characteristics as data rate,
+       latency, loss rate, reliability, and many other
+       parameters.";
+  }
+
+  /*
+   * Identities related to service bundling
+   */
+
+  identity bundling-type {
+    description
+      "The base identity for the bundling type.  It supports a
+       subset or all Customer Edge VLAN IDs (CE-VLAN IDs)
+       associated with an L2VPN service.";
+  }
+
+  identity multi-svc-bundling {
+    base bundling-type;
+    description
+      "Multi-service bundling, i.e., multiple CE-VLAN IDs
+       can be associated with an L2VPN service at a site.";
+  }
+
+  identity one2one-bundling {
+    base bundling-type;
+    description
+      "One-to-one service bundling, i.e., each L2VPN can
+       be associated with only one CE-VLAN ID at a site.";
+  }
+
+  identity all2one-bundling {
+    base bundling-type;
+    description
+      "All-to-one bundling, i.e., all CE-VLAN IDs are mapped
+       to one L2VPN service.";
+  }
+
+  /*
+   * Identities related to Ethernet services
+   */
+
+  identity control-mode {
+    description
+      "Base identity for the type of control mode used with the
+       Layer 2 Control Protocol (L2CP).";
+  }
+
+  identity peer {
+    base control-mode;
+    description
+      "'peer' mode, i.e., participate in the protocol towards
+       the CE.  Peering is common for the Link Aggregation Control
+       Protocol (LACP) and the Ethernet Local Management Interface
+       (E-LMI) and, occasionally, for the Link Layer Discovery
+       Protocol (LLDP).  For VPLSs and VPWSs, the subscriber can
+       also request that the peer service provider enable
+       spanning tree.";
+  }
+
+  identity tunnel {
+    base control-mode;
+    description
+      "'tunnel' mode, i.e., pass to the egress or destination
+       site.  For Ethernet Private Lines (EPLs), the expectation
+       is that L2CP frames are tunneled.";
+  }
+
+  identity discard {
+    base control-mode;
+    description
+      "'Discard' mode, i.e., discard the frame.";
+  }
+
+  identity neg-mode {
+    description
+      "Base identity for the type of negotiation mode.";
+  }
+
+  identity full-duplex {
+    base neg-mode;
+    description
+      "Full-duplex negotiation mode.";
+  }
+
+  identity auto-neg {
+    base neg-mode;
+    description
+      "Auto-negotiation mode.";
+  }
+
+  /******** VPN-related type ********/
+
+  typedef vpn-id {
+    type string;
+    description
+      "Defines an identifier that is used with a VPN module.
+       For example, this can be a service identifier, a node
+       identifier, etc.";
+  }
+
+  /******* VPN-related reusable groupings *******/
+
+  grouping vpn-description {
+    description
+      "Provides common VPN information.";
+    leaf vpn-id {
+      type vpn-common:vpn-id;
+      description
+        "A VPN identifier that uniquely identifies a VPN.
+         This identifier has a local meaning, e.g., within
+         a service provider network.";
+    }
+    leaf vpn-name {
+      type string;
+      description
+        "Used to associate a name with the service
+         in order to facilitate the identification of
+         the service.";
+    }
+    leaf vpn-description {
+      type string;
+      description
+        "Textual description of a VPN.";
+    }
+    leaf customer-name {
+      type string;
+      description
+        "Name of the customer that actually uses the VPN.";
+    }
+  }
+
+  grouping vpn-profile-cfg {
+    description
+      "Grouping for VPN profile configuration.";
+    container valid-provider-identifiers {
+      description
+        "Container for valid provider profile identifiers.";
+      list external-connectivity-identifier {
+        if-feature "external-connectivity";
+        key "id";
+        description
+          "List of profile identifiers that uniquely identify
+           profiles governing how external connectivity is
+           provided to a VPN.  A profile indicates the type of
+           external connectivity (Internet, cloud, etc.), the
+           sites/nodes that are associated with a connectivity
+           profile, etc.  A profile can also indicate filtering
+           rules and/or address translation rules.  Such features
+           may involve PE, P, or dedicated nodes as a function
+           of the deployment.";
+        leaf id {
+          type string;
+          description
+            "Identification of an external connectivity profile.
+             The profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      list encryption-profile-identifier {
+        key "id";
+        description
+          "List of encryption profile identifiers.";
+        leaf id {
+          type string;
+          description
+            "Identification of the encryption profile to be used.
+             The profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      list qos-profile-identifier {
+        key "id";
+        description
+          "List of QoS profile identifiers.";
+        leaf id {
+          type string;
+          description
+            "Identification of the QoS profile to be used.  The
+             profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      list bfd-profile-identifier {
+        key "id";
+        description
+          "List of BFD profile identifiers.";
+        leaf id {
+          type string;
+          description
+            "Identification of the BFD profile to be used.  The
+             profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      list forwarding-profile-identifier {
+        key "id";
+        description
+          "List of forwarding profile identifiers.";
+        leaf id {
+          type string;
+          description
+            "Identification of the forwarding profile to be used.
+             The profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      list routing-profile-identifier {
+        key "id";
+        description
+          "List of routing profile identifiers.";
+        leaf id {
+          type string;
+          description
+            "Identification of the routing profile to be used by
+             the routing protocols within sites, VPN network
+             accesses, or VPN nodes for referring to VRF's
+             import/export policies.
+
+             The profile only has significance within the service
+             provider's administrative domain.";
+        }
+      }
+      nacm:default-deny-write;
+    }
+  }
+
+  grouping oper-status-timestamp {
+    description
+      "This grouping defines some operational parameters for the
+       service.";
+    leaf status {
+      type identityref {
+        base operational-status;
+      }
+      config false;
+      description
+        "Operational status.";
+    }
+    leaf last-change {
+      type yang:date-and-time;
+      config false;
+      description
+        "Indicates the actual date and time of the service status
+         change.";
+    }
+  }
+
+  grouping service-status {
+    description
+      "Service status grouping.";
+    container status {
+      description
+        "Service status.";
+      container admin-status {
+        description
+          "Administrative service status.";
+        leaf status {
+          type identityref {
+            base administrative-status;
+          }
+          description
+            "Administrative service status.";
+        }
+        leaf last-change {
+          type yang:date-and-time;
+          description
+            "Indicates the actual date and time of the service
+             status change.";
+        }
+      }
+      container oper-status {
+        config false;
+        description
+          "Operational service status.";
+        uses oper-status-timestamp;
+      }
+    }
+  }
+
+  grouping underlay-transport {
+    description
+      "This grouping defines the type of underlay transport for
+       the VPN service or how that underlay is set.  It can
+       include an identifier for an abstract transport instance to
+       which the VPN is grafted or indicate a technical
+       implementation that is expressed as an ordered list of
+       protocols.";
+    choice type {
+      description
+        "A choice based on the type of underlay transport
+         constraints.";
+      case abstract {
+        description
+          "Indicates that the transport constraint is an abstract
+           concept.";
+        leaf transport-instance-id {
+          type string;
+          description
+            "An optional identifier of the abstract transport
+             instance.";
+        }
+        leaf instance-type {
+          type identityref {
+            base transport-instance-type;
+          }
+          description
+            "Indicates a transport instance type.  For example,
+             it can be a VPN+, an IETF network slice, a virtual
+             network, etc.";
+        }
+      }
+      case protocol {
+        description
+          "Indicates a list of protocols.";
+        leaf-list protocol {
+          type identityref {
+            base protocol-type;
+          }
+          ordered-by user;
+          description
+            "A client-ordered list of transport protocols.";
+        }
+      }
+    }
+  }
+
+  grouping vpn-route-targets {
+    description
+      "A grouping that specifies Route Target (RT) import/export
+       rules used in a BGP-enabled VPN.";
+    reference
+      "RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs)
+       RFC 4664: Framework for Layer 2 Virtual Private Networks
+                 (L2VPNs)";
+    list vpn-target {
+      key "id";
+      description
+        "RTs.  AND/OR operations may be defined based on the
+         assigned RTs.";
+      leaf id {
+        type uint8;
+        description
+          "Identifies each VPN target.";
+      }
+      list route-targets {
+        key "route-target";
+        description
+          "List of RTs.";
+        leaf route-target {
+          type rt-types:route-target;
+          description
+            "Conveys an RT value.";
+        }
+      }
+      leaf route-target-type {
+        type rt-types:route-target-type;
+        mandatory true;
+        description
+          "Import/export type of the RT.";
+      }
+    }
+    container vpn-policies {
+      description
+        "VPN service policies.  'vpn-policies' contains references
+         to the import and export policies to be associated with
+         the VPN service.";
+      leaf import-policy {
+        type string;
+        description
+          "Identifies the import policy.";
+      }
+      leaf export-policy {
+        type string;
+        description
+          "Identifies the export policy.";
+      }
+    }
+  }
+
+  grouping route-distinguisher {
+    description
+      "Grouping for Route Distinguishers (RDs).";
+    choice rd-choice {
+      description
+        "RD choice between several options for providing the RD
+         value.";
+      case directly-assigned {
+        description
+          "Explicitly assigns an RD value.";
+        leaf rd {
+          type rt-types:route-distinguisher;
+          description
+            "Indicates an RD value that is explicitly assigned.";
+        }
+      }
+      case directly-assigned-suffix {
+        description
+          "The value of the Assigned Number subfield of the RD.
+           The Administrator subfield of the RD will be
+           based on other configuration information such as the
+           Router ID or Autonomous System Number (ASN).";
+        leaf rd-suffix {
+          type uint16;
+          description
+            "Indicates the value of the Assigned Number
+             subfield that is explicitly assigned.";
+        }
+      }
+      case auto-assigned {
+        description
+          "The RD is auto-assigned.";
+        container rd-auto {
+          description
+            "The RD is auto-assigned.";
+          choice auto-mode {
+            description
+              "Indicates the auto-assignment mode.  The RD can be
+               automatically assigned with or without
+               indicating a pool from which the RD should be
+               taken.
+
+               For both cases, the server will auto-assign an RD
+               value 'auto-assigned-rd' and use that value
+               operationally.";
+            case from-pool {
+              leaf rd-pool-name {
+                type string;
+                description
+                  "The auto-assignment will be made from the pool
+                   identified by 'rd-pool-name'.";
+              }
+            }
+            case full-auto {
+              leaf auto {
+                type empty;
+                description
+                  "Indicates that an RD is fully auto-assigned.";
+              }
+            }
+          }
+          leaf auto-assigned-rd {
+            type rt-types:route-distinguisher;
+            config false;
+            description
+              "The value of the auto-assigned RD.";
+          }
+        }
+      }
+      case auto-assigned-suffix {
+        description
+          "The value of the Assigned Number subfield will be
+           auto-assigned.  The Administrator subfield will be
+           based on other configuration information such as the
+           Router ID or ASN.";
+        container rd-auto-suffix {
+          description
+            "The Assigned Number subfield is auto-assigned.";
+          choice auto-mode {
+            description
+              "Indicates the auto-assignment mode of the
+               Assigned Number subfield.  This number can be
+               automatically assigned with or without indicating a
+               pool from which the value should be taken.
+
+               For both cases, the server will auto-assign
+               'auto-assigned-rd-suffix' and use that value to
+               build the RD that will be used operationally.";
+            case from-pool {
+              leaf rd-pool-name {
+                type string;
+                description
+                  "The assignment will be made from the pool
+                   identified by 'rd-pool-name'.";
+              }
+            }
+            case full-auto {
+              leaf auto {
+                type empty;
+                description
+                  "Indicates that the Assigned Number subfield is
+                   fully auto-assigned.";
+              }
+            }
+          }
+          leaf auto-assigned-rd-suffix {
+            type uint16;
+            config false;
+            description
+              "Includes the value of the Assigned Number subfield
+               that is auto-assigned.";
+          }
+        }
+      }
+      case no-rd {
+        description
+          "Uses the 'empty' type to indicate that the RD has no
+           value and is not to be auto-assigned.";
+        leaf no-rd {
+          type empty;
+          description
+            "No RD is assigned.";
+        }
+      }
+    }
+  }
+
+  grouping vpn-components-group {
+    description
+      "Grouping definition to assign group IDs to associate
+       VPN nodes, sites, or network accesses.";
+    container groups {
+      description
+        "Lists the groups to which a VPN node, a site, or a
+         network access belongs.";
+      list group {
+        key "group-id";
+        description
+          "List of group IDs.";
+        leaf group-id {
+          type string;
+          description
+            "The group ID to which a VPN node, a site, or a
+             network access belongs.";
+        }
+      }
+    }
+  }
+
+  grouping placement-constraints {
+    description
+      "Constraints related to placement of a network access.";
+    list constraint {
+      key "constraint-type";
+      description
+        "List of constraints.";
+      leaf constraint-type {
+        type identityref {
+          base placement-diversity;
+        }
+        description
+          "Diversity constraint type.";
+      }
+      container target {
+        description
+          "The constraint will apply against this list of
+           groups.";
+        choice target-flavor {
+          description
+            "Choice for the group definition.";
+          case id {
+            list group {
+              key "group-id";
+              description
+                "List of groups.";
+              leaf group-id {
+                type string;
+                description
+                  "The constraint will apply against this
+                   particular group ID.";
+              }
+            }
+          }
+          case all-accesses {
+            leaf all-other-accesses {
+              type empty;
+              description
+                "The constraint will apply against all other
+                 network accesses of a site.";
+            }
+          }
+          case all-groups {
+            leaf all-other-groups {
+              type empty;
+              description
+                "The constraint will apply against all other
+                 groups managed by the customer.";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  grouping ports {
+    description
+      "Choice of specifying source or destination port numbers.";
+    choice source-port {
+      description
+        "Choice of specifying the source port or referring to a
+         group of source port numbers.";
+      container source-port-range-or-operator {
+        description
+          "Source port definition.";
+        uses packet-fields:port-range-or-operator;
+      }
+    }
+    choice destination-port {
+      description
+        "Choice of specifying a destination port or referring to a
+         group of destination port numbers.";
+      container destination-port-range-or-operator {
+        description
+          "Destination port definition.";
+        uses packet-fields:port-range-or-operator;
+      }
+    }
+  }
+
+  grouping qos-classification-policy {
+    description
+      "Configuration of the traffic classification policy.";
+    list rule {
+      key "id";
+      ordered-by user;
+      description
+        "List of marking rules.";
+      leaf id {
+        type string;
+        description
+          "An identifier of the QoS classification policy rule.";
+      }
+      choice match-type {
+        default "match-flow";
+        description
+          "Choice for classification.";
+        case match-flow {
+          choice l3 {
+            description
+              "Either IPv4 or IPv6.";
+            container ipv4 {
+              description
+                "Rule set that matches the IPv4 header.";
+              uses packet-fields:acl-ip-header-fields;
+              uses packet-fields:acl-ipv4-header-fields;
+            }
+            container ipv6 {
+              description
+                "Rule set that matches the IPv6 header.";
+              uses packet-fields:acl-ip-header-fields;
+              uses packet-fields:acl-ipv6-header-fields;
+            }
+          }
+          choice l4 {
+            description
+              "Includes Layer-4-specific information.
+               This version focuses on TCP and UDP.";
+            container tcp {
+              description
+                "Rule set that matches the TCP header.";
+              uses packet-fields:acl-tcp-header-fields;
+              uses ports;
+            }
+            container udp {
+              description
+                "Rule set that matches the UDP header.";
+              uses packet-fields:acl-udp-header-fields;
+              uses ports;
+            }
+          }
+        }
+        case match-application {
+          leaf match-application {
+            type identityref {
+              base customer-application;
+            }
+            description
+              "Defines the application to match.";
+          }
+        }
+      }
+      leaf target-class-id {
+        type string;
+        description
+          "Identification of the class of service.  This
+           identifier is internal to the administration.";
+      }
+    }
+  }
+}
diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-yang-types@2013-07-15.yang b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 0000000000000000000000000000000000000000..956562a7b342055127961732d8bde4be21c80d7d
--- /dev/null
+++ b/src/nbi/service/rest_server/nbi_plugins/ietf_sap_topology/yang/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,475 @@
+   module ietf-yang-types {
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+     prefix "yang";
+
+     organization
+      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+     contact
+      "WG Web:   <http://tools.ietf.org/wg/netmod/>
+       WG List:  <mailto:netmod@ietf.org>
+
+       WG Chair: David Kessens
+                 <mailto:david.kessens@nsn.com>
+
+       WG Chair: Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>
+
+       Editor:   Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>";
+
+     description
+      "This module contains a collection of generally useful derived
+       YANG data types.
+
+       Copyright (c) 2013 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC 6991; see
+       the RFC itself for full legal notices.";
+
+     revision 2013-07-15 {
+       description
+        "This revision adds the following new data types:
+         - yang-identifier
+         - hex-string
+         - uuid
+         - dotted-quad";
+       reference
+        "RFC 6991: Common YANG Data Types";
+     }
+
+     revision 2010-09-24 {
+       description
+        "Initial revision.";
+       reference
+        "RFC 6021: Common YANG Data Types";
+     }
+
+     /*** collection of counter and gauge types ***/
+
+     typedef counter32 {
+       type uint32;
+       description
+        "The counter32 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter32 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter32 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter32.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter32 {
+       type yang:counter32;
+       default "0";
+       description
+        "The zero-based-counter32 type represents a counter32
+         that has the defined 'initial' value zero.
+
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+
+         In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter32 textual convention of the SMIv2.";
+       reference
+         "RFC 4502: Remote Network Monitoring Management Information
+                    Base Version 2";
+     }
+
+     typedef counter64 {
+       type uint64;
+       description
+        "The counter64 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter64 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter64 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter64.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter64 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter64 {
+       type yang:counter64;
+       default "0";
+       description
+        "The zero-based-counter64 type represents a counter64 that
+         has the defined 'initial' value zero.
+
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+
+         In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter64 textual convention of the SMIv2.";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     typedef gauge32 {
+       type uint32;
+       description
+        "The gauge32 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^32-1 (4294967295 decimal), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge32 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge32 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the Gauge32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef gauge64 {
+       type uint64;
+       description
+        "The gauge64 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^64-1 (18446744073709551615), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge64 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge64 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the CounterBasedGauge64 SMIv2 textual convention defined
+         in RFC 2856";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     /*** collection of identifier-related types ***/
+
+     typedef object-identifier {
+       type string {
+         pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+               + '(\.(0|([1-9]\d*)))*';
+       }
+       description
+        "The object-identifier type represents administratively
+         assigned names in a registration-hierarchical-name tree.
+
+         Values of this type are denoted as a sequence of numerical
+         non-negative sub-identifier values.  Each sub-identifier
+         value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+         are separated by single dots and without any intermediate
+         whitespace.
+
+         The ASN.1 standard restricts the value space of the first
+         sub-identifier to 0, 1, or 2.  Furthermore, the value space
+         of the second sub-identifier is restricted to the range
+         0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+         the ASN.1 standard requires that an object identifier
+         has always at least two sub-identifiers.  The pattern
+         captures these restrictions.
+
+         Although the number of sub-identifiers is not limited,
+         module designers should realize that there may be
+         implementations that stick with the SMIv2 limit of 128
+         sub-identifiers.
+
+         This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+         since it is not restricted to 128 sub-identifiers.  Hence,
+         this type SHOULD NOT be used to represent the SMIv2 OBJECT
+         IDENTIFIER type; the object-identifier-128 type SHOULD be
+         used instead.";
+       reference
+        "ISO9834-1: Information technology -- Open Systems
+         Interconnection -- Procedures for the operation of OSI
+         Registration Authorities: General procedures and top
+         arcs of the ASN.1 Object Identifier tree";
+     }
+
+     typedef object-identifier-128 {
+       type object-identifier {
+         pattern '\d*(\.\d*){1,127}';
+       }
+       description
+        "This type represents object-identifiers restricted to 128
+         sub-identifiers.
+
+         In the value set and its semantics, this type is equivalent
+         to the OBJECT IDENTIFIER type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef yang-identifier {
+       type string {
+         length "1..max";
+         pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+         pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+       }
+       description
+         "A YANG identifier string as defined by the 'identifier'
+          rule in Section 12 of RFC 6020.  An identifier must
+          start with an alphabetic character or an underscore
+          followed by an arbitrary sequence of alphabetic or
+          numeric characters, underscores, hyphens, or dots.
+
+          A YANG identifier MUST NOT start with any possible
+          combination of the lowercase or uppercase character
+          sequence 'xml'.";
+       reference
+         "RFC 6020: YANG - A Data Modeling Language for the Network
+                    Configuration Protocol (NETCONF)";
+     }
+
+     /*** collection of types related to date and time***/
+
+     typedef date-and-time {
+       type string {
+         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+               + '(Z|[\+\-]\d{2}:\d{2})';
+       }
+       description
+        "The date-and-time type is a profile of the ISO 8601
+         standard for representation of dates and times using the
+         Gregorian calendar.  The profile is defined by the
+         date-time production in Section 5.6 of RFC 3339.
+
+         The date-and-time type is compatible with the dateTime XML
+         schema type with the following notable exceptions:
+
+         (a) The date-and-time type does not allow negative years.
+
+         (b) The date-and-time time-offset -00:00 indicates an unknown
+             time zone (see RFC 3339) while -00:00 and +00:00 and Z
+             all represent the same time zone in dateTime.
+
+         (c) The canonical format (see below) of data-and-time values
+             differs from the canonical format used by the dateTime XML
+             schema type, which requires all times to be in UTC using
+             the time-offset 'Z'.
+
+         This type is not equivalent to the DateAndTime textual
+         convention of the SMIv2 since RFC 3339 uses a different
+         separator between full-date and full-time and provides
+         higher resolution of time-secfrac.
+
+         The canonical format for date-and-time values with a known time
+         zone uses a numeric time zone offset that is calculated using
+         the device's configured known offset to UTC time.  A change of
+         the device's offset to UTC time will cause date-and-time values
+         to change accordingly.  Such changes might happen periodically
+         in case a server follows automatically daylight saving time
+         (DST) time zone offset changes.  The canonical format for
+         date-and-time values with an unknown time zone (usually
+         referring to the notion of local time) uses the time-offset
+         -00:00.";
+       reference
+        "RFC 3339: Date and Time on the Internet: Timestamps
+         RFC 2579: Textual Conventions for SMIv2
+         XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+     }
+
+     typedef timeticks {
+       type uint32;
+       description
+        "The timeticks type represents a non-negative integer that
+         represents the time, modulo 2^32 (4294967296 decimal), in
+         hundredths of a second between two epochs.  When a schema
+         node is defined that uses this type, the description of
+         the schema node identifies both of the reference epochs.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeTicks type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef timestamp {
+       type yang:timeticks;
+       description
+        "The timestamp type represents the value of an associated
+         timeticks schema node at which a specific occurrence
+         happened.  The specific occurrence must be defined in the
+         description of any schema node defined using this type.  When
+         the specific occurrence occurred prior to the last time the
+         associated timeticks attribute was zero, then the timestamp
+         value is zero.  Note that this requires all timestamp values
+         to be reset to zero when the value of the associated timeticks
+         attribute reaches 497+ days and wraps around to zero.
+
+         The associated timeticks schema node must be specified
+         in the description of any schema node using this type.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeStamp textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of generic address types ***/
+
+     typedef phys-address {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+
+       description
+        "Represents media- or physical-level addresses represented
+         as a sequence octets, each octet represented by two hexadecimal
+         numbers.  Octets are separated by colons.  The canonical
+         representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the PhysAddress textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     typedef mac-address {
+       type string {
+         pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+       }
+       description
+        "The mac-address type represents an IEEE 802 MAC address.
+         The canonical representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the MacAddress textual convention of the SMIv2.";
+       reference
+        "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                   Networks: Overview and Architecture
+         RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of XML-specific types ***/
+
+     typedef xpath1.0 {
+       type string;
+       description
+        "This type represents an XPATH 1.0 expression.
+
+         When a schema node is defined that uses this type, the
+         description of the schema node MUST specify the XPath
+         context in which the XPath expression is evaluated.";
+       reference
+        "XPATH: XML Path Language (XPath) Version 1.0";
+     }
+
+     /*** collection of string types ***/
+
+     typedef hex-string {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+
+       description
+        "A hexadecimal string with octets represented as hex digits
+         separated by colons.  The canonical representation uses
+         lowercase characters.";
+     }
+
+     typedef uuid {
+       type string {
+         pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+               + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+       }
+       description
+        "A Universally Unique IDentifier in the string representation
+         defined in RFC 4122.  The canonical representation uses
+         lowercase characters.
+
+         The following is an example of a UUID in string representation:
+         f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+         ";
+       reference
+        "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                   Namespace";
+     }
+
+     typedef dotted-quad {
+       type string {
+         pattern
+           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+         + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+       }
+       description
+         "An unsigned 32-bit number expressed in the dotted-quad
+          notation, i.e., four octets written as decimal numbers
+          and separated with the '.' (full stop) character.";
+     }
+   }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index d41b80f1d0efdbd5a345c1ebf41c8c25fb7157f7..cfce9dad0df2af8ed6a9bf31d8184bf38a590cea 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -199,6 +199,18 @@ public final class ContextOuterClass {
          * <code>DEVICEDRIVER_QKD = 12;</code>
          */
         DEVICEDRIVER_QKD(12),
+        /**
+         * <code>DEVICEDRIVER_IETF_L3VPN = 13;</code>
+         */
+        DEVICEDRIVER_IETF_L3VPN(13),
+        /**
+         * <code>DEVICEDRIVER_IETF_SLICE = 14;</code>
+         */
+        DEVICEDRIVER_IETF_SLICE(14),
+        /**
+         * <code>DEVICEDRIVER_NCE = 15;</code>
+         */
+        DEVICEDRIVER_NCE(15),
         UNRECOGNIZED(-1);
 
         /**
@@ -270,6 +282,21 @@ public final class ContextOuterClass {
          */
         public static final int DEVICEDRIVER_QKD_VALUE = 12;
 
+        /**
+         * <code>DEVICEDRIVER_IETF_L3VPN = 13;</code>
+         */
+        public static final int DEVICEDRIVER_IETF_L3VPN_VALUE = 13;
+
+        /**
+         * <code>DEVICEDRIVER_IETF_SLICE = 14;</code>
+         */
+        public static final int DEVICEDRIVER_IETF_SLICE_VALUE = 14;
+
+        /**
+         * <code>DEVICEDRIVER_NCE = 15;</code>
+         */
+        public static final int DEVICEDRIVER_NCE_VALUE = 15;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -319,6 +346,12 @@ public final class ContextOuterClass {
                     return DEVICEDRIVER_OC;
                 case 12:
                     return DEVICEDRIVER_QKD;
+                case 13:
+                    return DEVICEDRIVER_IETF_L3VPN;
+                case 14:
+                    return DEVICEDRIVER_IETF_SLICE;
+                case 15:
+                    return DEVICEDRIVER_NCE;
                 default:
                     return null;
             }
@@ -482,6 +515,141 @@ public final class ContextOuterClass {
         }
     }
 
+    /**
+     * Protobuf enum {@code context.LinkTypeEnum}
+     */
+    public enum LinkTypeEnum implements com.google.protobuf.ProtocolMessageEnum {
+
+        /**
+         * <code>LINKTYPE_UNKNOWN = 0;</code>
+         */
+        LINKTYPE_UNKNOWN(0),
+        /**
+         * <code>LINKTYPE_COPPER = 1;</code>
+         */
+        LINKTYPE_COPPER(1),
+        /**
+         * <code>LINKTYPE_FIBER = 2;</code>
+         */
+        LINKTYPE_FIBER(2),
+        /**
+         * <code>LINKTYPE_RADIO = 3;</code>
+         */
+        LINKTYPE_RADIO(3),
+        /**
+         * <code>LINKTYPE_VIRTUAL = 4;</code>
+         */
+        LINKTYPE_VIRTUAL(4),
+        UNRECOGNIZED(-1);
+
+        /**
+         * <code>LINKTYPE_UNKNOWN = 0;</code>
+         */
+        public static final int LINKTYPE_UNKNOWN_VALUE = 0;
+
+        /**
+         * <code>LINKTYPE_COPPER = 1;</code>
+         */
+        public static final int LINKTYPE_COPPER_VALUE = 1;
+
+        /**
+         * <code>LINKTYPE_FIBER = 2;</code>
+         */
+        public static final int LINKTYPE_FIBER_VALUE = 2;
+
+        /**
+         * <code>LINKTYPE_RADIO = 3;</code>
+         */
+        public static final int LINKTYPE_RADIO_VALUE = 3;
+
+        /**
+         * <code>LINKTYPE_VIRTUAL = 4;</code>
+         */
+        public static final int LINKTYPE_VIRTUAL_VALUE = 4;
+
+        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 LinkTypeEnum 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 LinkTypeEnum forNumber(int value) {
+            switch(value) {
+                case 0:
+                    return LINKTYPE_UNKNOWN;
+                case 1:
+                    return LINKTYPE_COPPER;
+                case 2:
+                    return LINKTYPE_FIBER;
+                case 3:
+                    return LINKTYPE_RADIO;
+                case 4:
+                    return LINKTYPE_VIRTUAL;
+                default:
+                    return null;
+            }
+        }
+
+        public static com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum> internalGetValueMap() {
+            return internalValueMap;
+        }
+
+        private static final com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum>() {
+
+            public LinkTypeEnum findValueByNumber(int number) {
+                return LinkTypeEnum.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 LinkTypeEnum[] VALUES = values();
+
+        public static LinkTypeEnum 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 LinkTypeEnum(int value) {
+            this.value = value;
+        }
+    }
+
     /**
      * Protobuf enum {@code context.ServiceTypeEnum}
      */
@@ -628,7 +796,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(3);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(4);
         }
 
         private static final ServiceTypeEnum[] VALUES = values();
@@ -774,7 +942,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(4);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(5);
         }
 
         private static final ServiceStatusEnum[] VALUES = values();
@@ -920,7 +1088,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(5);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(6);
         }
 
         private static final SliceStatusEnum[] VALUES = values();
@@ -1037,7 +1205,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(6);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
         }
 
         private static final ConfigActionEnum[] VALUES = values();
@@ -1154,7 +1322,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8);
         }
 
         private static final ConstraintActionEnum[] VALUES = values();
@@ -1333,7 +1501,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(9);
         }
 
         private static final IsolationLevelEnum[] VALUES = values();
@@ -8814,6 +8982,31 @@ public final class ContextOuterClass {
          * <code>repeated .context.LinkId link_ids = 4;</code>
          */
         context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(int index);
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        context.ContextOuterClass.LinkId getOpticalLinkIds(int index);
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        int getOpticalLinkIdsCount();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index);
     }
 
     /**
@@ -8833,6 +9026,7 @@ public final class ContextOuterClass {
             name_ = "";
             deviceIds_ = java.util.Collections.emptyList();
             linkIds_ = java.util.Collections.emptyList();
+            opticalLinkIds_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
@@ -9008,6 +9202,51 @@ public final class ContextOuterClass {
             return linkIds_.get(index);
         }
 
+        public static final int OPTICAL_LINK_IDS_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.LinkId> opticalLinkIds_;
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList() {
+            return opticalLinkIds_;
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList() {
+            return opticalLinkIds_;
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public int getOpticalLinkIdsCount() {
+            return opticalLinkIds_.size();
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkId getOpticalLinkIds(int index) {
+            return opticalLinkIds_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index) {
+            return opticalLinkIds_.get(index);
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -9035,6 +9274,9 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 output.writeMessage(4, linkIds_.get(i));
             }
+            for (int i = 0; i < opticalLinkIds_.size(); i++) {
+                output.writeMessage(5, opticalLinkIds_.get(i));
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -9056,6 +9298,9 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkIds_.get(i));
             }
+            for (int i = 0; i < opticalLinkIds_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, opticalLinkIds_.get(i));
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -9082,6 +9327,8 @@ public final class ContextOuterClass {
                 return false;
             if (!getLinkIdsList().equals(other.getLinkIdsList()))
                 return false;
+            if (!getOpticalLinkIdsList().equals(other.getOpticalLinkIdsList()))
+                return false;
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -9108,6 +9355,10 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkIdsList().hashCode();
             }
+            if (getOpticalLinkIdsCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINK_IDS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinkIdsList().hashCode();
+            }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
@@ -9232,6 +9483,13 @@ public final class ContextOuterClass {
                     linkIdsBuilder_.clear();
                 }
                 bitField0_ = (bitField0_ & ~0x00000008);
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIds_ = java.util.Collections.emptyList();
+                } else {
+                    opticalLinkIds_ = null;
+                    opticalLinkIdsBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 return this;
             }
 
@@ -9284,6 +9542,15 @@ public final class ContextOuterClass {
                 } else {
                     result.linkIds_ = linkIdsBuilder_.build();
                 }
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
+                        opticalLinkIds_ = java.util.Collections.unmodifiableList(opticalLinkIds_);
+                        bitField0_ = (bitField0_ & ~0x00000010);
+                    }
+                    result.opticalLinkIds_ = opticalLinkIds_;
+                } else {
+                    result.opticalLinkIds_ = opticalLinkIdsBuilder_.build();
+                }
             }
 
             private void buildPartial0(context.ContextOuterClass.Topology result) {
@@ -9365,6 +9632,30 @@ public final class ContextOuterClass {
                         }
                     }
                 }
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (!other.opticalLinkIds_.isEmpty()) {
+                        if (opticalLinkIds_.isEmpty()) {
+                            opticalLinkIds_ = other.opticalLinkIds_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                        } else {
+                            ensureOpticalLinkIdsIsMutable();
+                            opticalLinkIds_.addAll(other.opticalLinkIds_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalLinkIds_.isEmpty()) {
+                        if (opticalLinkIdsBuilder_.isEmpty()) {
+                            opticalLinkIdsBuilder_.dispose();
+                            opticalLinkIdsBuilder_ = null;
+                            opticalLinkIds_ = other.opticalLinkIds_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                            opticalLinkIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinkIdsFieldBuilder() : null;
+                        } else {
+                            opticalLinkIdsBuilder_.addAllMessages(other.opticalLinkIds_);
+                        }
+                    }
+                }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
@@ -9426,6 +9717,18 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.LinkId m = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+                                    if (opticalLinkIdsBuilder_ == null) {
+                                        ensureOpticalLinkIdsIsMutable();
+                                        opticalLinkIds_.add(m);
+                                    } else {
+                                        opticalLinkIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -10116,6 +10419,243 @@ public final class ContextOuterClass {
                 return linkIdsBuilder_;
             }
 
+            private java.util.List<context.ContextOuterClass.LinkId> opticalLinkIds_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalLinkIdsIsMutable() {
+                if (!((bitField0_ & 0x00000010) != 0)) {
+                    opticalLinkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(opticalLinkIds_);
+                    bitField0_ |= 0x00000010;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> opticalLinkIdsBuilder_;
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinkIds_);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public int getOpticalLinkIdsCount() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.size();
+                } else {
+                    return opticalLinkIdsBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId getOpticalLinkIds(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.get(index);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder setOpticalLinkIds(int index, context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder setOpticalLinkIds(int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(int index, context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addAllOpticalLinkIds(java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinkIds_);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder clearOpticalLinkIds() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIds_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000010);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder removeOpticalLinkIds(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.remove(index);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder getOpticalLinkIdsBuilder(int index) {
+                return getOpticalLinkIdsFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.get(index);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList() {
+                if (opticalLinkIdsBuilder_ != null) {
+                    return opticalLinkIdsBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinkIds_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder addOpticalLinkIdsBuilder() {
+                return getOpticalLinkIdsFieldBuilder().addBuilder(context.ContextOuterClass.LinkId.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder addOpticalLinkIdsBuilder(int index) {
+                return getOpticalLinkIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.LinkId.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.LinkId.Builder> getOpticalLinkIdsBuilderList() {
+                return getOpticalLinkIdsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsFieldBuilder() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(opticalLinkIds_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
+                    opticalLinkIds_ = null;
+                }
+                return opticalLinkIdsBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -10253,6 +10793,31 @@ public final class ContextOuterClass {
          * <code>repeated .context.Link links = 4;</code>
          */
         context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(int index);
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        context.ContextOuterClass.OpticalLink getOpticalLinks(int index);
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        int getOpticalLinksCount();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index);
     }
 
     /**
@@ -10272,6 +10837,7 @@ public final class ContextOuterClass {
             name_ = "";
             devices_ = java.util.Collections.emptyList();
             links_ = java.util.Collections.emptyList();
+            opticalLinks_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
@@ -10447,6 +11013,51 @@ public final class ContextOuterClass {
             return links_.get(index);
         }
 
+        public static final int OPTICAL_LINKS_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_;
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+            return opticalLinks_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+            return opticalLinks_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public int getOpticalLinksCount() {
+            return opticalLinks_.size();
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+            return opticalLinks_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+            return opticalLinks_.get(index);
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -10474,6 +11085,9 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 output.writeMessage(4, links_.get(i));
             }
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                output.writeMessage(5, opticalLinks_.get(i));
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -10495,6 +11109,9 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, links_.get(i));
             }
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, opticalLinks_.get(i));
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -10521,6 +11138,8 @@ public final class ContextOuterClass {
                 return false;
             if (!getLinksList().equals(other.getLinksList()))
                 return false;
+            if (!getOpticalLinksList().equals(other.getOpticalLinksList()))
+                return false;
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -10547,6 +11166,10 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINKS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinksList().hashCode();
             }
+            if (getOpticalLinksCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINKS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinksList().hashCode();
+            }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
@@ -10671,6 +11294,13 @@ public final class ContextOuterClass {
                     linksBuilder_.clear();
                 }
                 bitField0_ = (bitField0_ & ~0x00000008);
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                } else {
+                    opticalLinks_ = null;
+                    opticalLinksBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 return this;
             }
 
@@ -10723,6 +11353,15 @@ public final class ContextOuterClass {
                 } else {
                     result.links_ = linksBuilder_.build();
                 }
+                if (opticalLinksBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
+                        opticalLinks_ = java.util.Collections.unmodifiableList(opticalLinks_);
+                        bitField0_ = (bitField0_ & ~0x00000010);
+                    }
+                    result.opticalLinks_ = opticalLinks_;
+                } else {
+                    result.opticalLinks_ = opticalLinksBuilder_.build();
+                }
             }
 
             private void buildPartial0(context.ContextOuterClass.TopologyDetails result) {
@@ -10804,6 +11443,30 @@ public final class ContextOuterClass {
                         }
                     }
                 }
+                if (opticalLinksBuilder_ == null) {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinks_.isEmpty()) {
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                        } else {
+                            ensureOpticalLinksIsMutable();
+                            opticalLinks_.addAll(other.opticalLinks_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinksBuilder_.isEmpty()) {
+                            opticalLinksBuilder_.dispose();
+                            opticalLinksBuilder_ = null;
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                            opticalLinksBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinksFieldBuilder() : null;
+                        } else {
+                            opticalLinksBuilder_.addAllMessages(other.opticalLinks_);
+                        }
+                    }
+                }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
@@ -10865,6 +11528,18 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.OpticalLink m = input.readMessage(context.ContextOuterClass.OpticalLink.parser(), extensionRegistry);
+                                    if (opticalLinksBuilder_ == null) {
+                                        ensureOpticalLinksIsMutable();
+                                        opticalLinks_.add(m);
+                                    } else {
+                                        opticalLinksBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -11555,6 +12230,243 @@ public final class ContextOuterClass {
                 return linksBuilder_;
             }
 
+            private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalLinksIsMutable() {
+                if (!((bitField0_ & 0x00000010) != 0)) {
+                    opticalLinks_ = new java.util.ArrayList<context.ContextOuterClass.OpticalLink>(opticalLinks_);
+                    bitField0_ |= 0x00000010;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> opticalLinksBuilder_;
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+                if (opticalLinksBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                } else {
+                    return opticalLinksBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public int getOpticalLinksCount() {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.size();
+                } else {
+                    return opticalLinksBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addAllOpticalLinks(java.lang.Iterable<? extends context.ContextOuterClass.OpticalLink> values) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinks_);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder clearOpticalLinks() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000010);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder removeOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.remove(index);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder getOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+                if (opticalLinksBuilder_ != null) {
+                    return opticalLinksBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder() {
+                return getOpticalLinksFieldBuilder().addBuilder(context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink.Builder> getOpticalLinksBuilderList() {
+                return getOpticalLinksFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksFieldBuilder() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder>(opticalLinks_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
+                    opticalLinks_ = null;
+                }
+                return opticalLinksBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -23209,44 +24121,56 @@ public final class ContextOuterClass {
         com.google.protobuf.ByteString getNameBytes();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The enum numeric value on the wire for linkType.
+         */
+        int getLinkTypeValue();
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The linkType.
+         */
+        context.ContextOuterClass.LinkTypeEnum getLinkType();
+
+        /**
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         int getLinkEndpointIdsCount();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index);
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return Whether the attributes field is set.
          */
         boolean hasAttributes();
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return The attributes.
          */
         context.ContextOuterClass.LinkAttributes getAttributes();
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          */
         context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder();
     }
@@ -23266,6 +24190,7 @@ public final class ContextOuterClass {
 
         private Link() {
             name_ = "";
+            linkType_ = 0;
             linkEndpointIds_ = java.util.Collections.emptyList();
         }
 
@@ -23352,13 +24277,36 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 3;
+        public static final int LINK_TYPE_FIELD_NUMBER = 3;
+
+        private int linkType_ = 0;
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The enum numeric value on the wire for linkType.
+         */
+        @java.lang.Override
+        public int getLinkTypeValue() {
+            return linkType_;
+        }
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The linkType.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkTypeEnum getLinkType() {
+            context.ContextOuterClass.LinkTypeEnum result = context.ContextOuterClass.LinkTypeEnum.forNumber(linkType_);
+            return result == null ? context.ContextOuterClass.LinkTypeEnum.UNRECOGNIZED : result;
+        }
+
+        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 4;
 
         @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
@@ -23366,7 +24314,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
@@ -23374,7 +24322,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public int getLinkEndpointIdsCount() {
@@ -23382,7 +24330,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
@@ -23390,19 +24338,19 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
             return linkEndpointIds_.get(index);
         }
 
-        public static final int ATTRIBUTES_FIELD_NUMBER = 4;
+        public static final int ATTRIBUTES_FIELD_NUMBER = 5;
 
         private context.ContextOuterClass.LinkAttributes attributes_;
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return Whether the attributes field is set.
          */
         @java.lang.Override
@@ -23411,7 +24359,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return The attributes.
          */
         @java.lang.Override
@@ -23420,7 +24368,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder() {
@@ -23448,11 +24396,14 @@ public final class ContextOuterClass {
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
+            if (linkType_ != context.ContextOuterClass.LinkTypeEnum.LINKTYPE_UNKNOWN.getNumber()) {
+                output.writeEnum(3, linkType_);
+            }
             for (int i = 0; i < linkEndpointIds_.size(); i++) {
-                output.writeMessage(3, linkEndpointIds_.get(i));
+                output.writeMessage(4, linkEndpointIds_.get(i));
             }
             if (attributes_ != null) {
-                output.writeMessage(4, getAttributes());
+                output.writeMessage(5, getAttributes());
             }
             getUnknownFields().writeTo(output);
         }
@@ -23469,11 +24420,14 @@ public final class ContextOuterClass {
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
+            if (linkType_ != context.ContextOuterClass.LinkTypeEnum.LINKTYPE_UNKNOWN.getNumber()) {
+                size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, linkType_);
+            }
             for (int i = 0; i < linkEndpointIds_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, linkEndpointIds_.get(i));
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkEndpointIds_.get(i));
             }
             if (attributes_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getAttributes());
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getAttributes());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -23497,6 +24451,8 @@ public final class ContextOuterClass {
             }
             if (!getName().equals(other.getName()))
                 return false;
+            if (linkType_ != other.linkType_)
+                return false;
             if (!getLinkEndpointIdsList().equals(other.getLinkEndpointIdsList()))
                 return false;
             if (hasAttributes() != other.hasAttributes())
@@ -23523,6 +24479,8 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + NAME_FIELD_NUMBER;
             hash = (53 * hash) + getName().hashCode();
+            hash = (37 * hash) + LINK_TYPE_FIELD_NUMBER;
+            hash = (53 * hash) + linkType_;
             if (getLinkEndpointIdsCount() > 0) {
                 hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
@@ -23641,13 +24599,14 @@ public final class ContextOuterClass {
                     linkIdBuilder_ = null;
                 }
                 name_ = "";
+                linkType_ = 0;
                 if (linkEndpointIdsBuilder_ == null) {
                     linkEndpointIds_ = java.util.Collections.emptyList();
                 } else {
                     linkEndpointIds_ = null;
                     linkEndpointIdsBuilder_.clear();
                 }
-                bitField0_ = (bitField0_ & ~0x00000004);
+                bitField0_ = (bitField0_ & ~0x00000008);
                 attributes_ = null;
                 if (attributesBuilder_ != null) {
                     attributesBuilder_.dispose();
@@ -23688,9 +24647,9 @@ public final class ContextOuterClass {
 
             private void buildPartialRepeatedFields(context.ContextOuterClass.Link result) {
                 if (linkEndpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000004);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.linkEndpointIds_ = linkEndpointIds_;
                 } else {
@@ -23706,7 +24665,10 @@ public final class ContextOuterClass {
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.name_ = name_;
                 }
-                if (((from_bitField0_ & 0x00000008) != 0)) {
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.linkType_ = linkType_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
                     result.attributes_ = attributesBuilder_ == null ? attributes_ : attributesBuilder_.build();
                 }
             }
@@ -23732,11 +24694,14 @@ public final class ContextOuterClass {
                     bitField0_ |= 0x00000002;
                     onChanged();
                 }
+                if (other.linkType_ != 0) {
+                    setLinkTypeValue(other.getLinkTypeValue());
+                }
                 if (linkEndpointIdsBuilder_ == null) {
                     if (!other.linkEndpointIds_.isEmpty()) {
                         if (linkEndpointIds_.isEmpty()) {
                             linkEndpointIds_ = other.linkEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureLinkEndpointIdsIsMutable();
                             linkEndpointIds_.addAll(other.linkEndpointIds_);
@@ -23749,7 +24714,7 @@ public final class ContextOuterClass {
                             linkEndpointIdsBuilder_.dispose();
                             linkEndpointIdsBuilder_ = null;
                             linkEndpointIds_ = other.linkEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             linkEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkEndpointIdsFieldBuilder() : null;
                         } else {
                             linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
@@ -23796,7 +24761,14 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 18
-                            case 26:
+                            case 24:
+                                {
+                                    linkType_ = input.readEnum();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 34:
                                 {
                                     context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
                                     if (linkEndpointIdsBuilder_ == null) {
@@ -23807,14 +24779,14 @@ public final class ContextOuterClass {
                                     }
                                     break;
                                 }
-                            // case 26
-                            case 34:
+                            // case 34
+                            case 42:
                                 {
                                     input.readMessage(getAttributesFieldBuilder().getBuilder(), extensionRegistry);
-                                    bitField0_ |= 0x00000008;
+                                    bitField0_ |= 0x00000010;
                                     break;
                                 }
-                            // case 34
+                            // case 42
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -24031,19 +25003,78 @@ public final class ContextOuterClass {
                 return this;
             }
 
+            private int linkType_ = 0;
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return The enum numeric value on the wire for linkType.
+             */
+            @java.lang.Override
+            public int getLinkTypeValue() {
+                return linkType_;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @param value The enum numeric value on the wire for linkType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLinkTypeValue(int value) {
+                linkType_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return The linkType.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.LinkTypeEnum getLinkType() {
+                context.ContextOuterClass.LinkTypeEnum result = context.ContextOuterClass.LinkTypeEnum.forNumber(linkType_);
+                return result == null ? context.ContextOuterClass.LinkTypeEnum.UNRECOGNIZED : result;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @param value The linkType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLinkType(context.ContextOuterClass.LinkTypeEnum value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                bitField0_ |= 0x00000004;
+                linkType_ = value.getNumber();
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLinkType() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                linkType_ = 0;
+                onChanged();
+                return this;
+            }
+
             private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ = java.util.Collections.emptyList();
 
             private void ensureLinkEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
-                    bitField0_ |= 0x00000004;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24054,7 +25085,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public int getLinkEndpointIdsCount() {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24065,7 +25096,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24076,7 +25107,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24093,7 +25124,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24107,7 +25138,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24124,7 +25155,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24141,7 +25172,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24155,7 +25186,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24169,7 +25200,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addAllLinkEndpointIds(java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24183,12 +25214,12 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder clearLinkEndpointIds() {
                 if (linkEndpointIdsBuilder_ == null) {
                     linkEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     linkEndpointIdsBuilder_.clear();
@@ -24197,7 +25228,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder removeLinkEndpointIds(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24211,14 +25242,14 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(int index) {
                 return getLinkEndpointIdsFieldBuilder().getBuilder(index);
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24229,7 +25260,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
                 if (linkEndpointIdsBuilder_ != null) {
@@ -24240,21 +25271,21 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
                 return getLinkEndpointIdsFieldBuilder().addBuilder(context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(int index) {
                 return getLinkEndpointIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<context.ContextOuterClass.EndPointId.Builder> getLinkEndpointIdsBuilderList() {
                 return getLinkEndpointIdsFieldBuilder().getBuilderList();
@@ -24262,7 +25293,7 @@ public final class ContextOuterClass {
 
             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_ & 0x00000004) != 0), getParentForChildren(), isClean());
+                    linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(linkEndpointIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     linkEndpointIds_ = null;
                 }
                 return linkEndpointIdsBuilder_;
@@ -24273,15 +25304,15 @@ public final class ContextOuterClass {
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.LinkAttributes, context.ContextOuterClass.LinkAttributes.Builder, context.ContextOuterClass.LinkAttributesOrBuilder> attributesBuilder_;
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              * @return Whether the attributes field is set.
              */
             public boolean hasAttributes() {
-                return ((bitField0_ & 0x00000008) != 0);
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              * @return The attributes.
              */
             public context.ContextOuterClass.LinkAttributes getAttributes() {
@@ -24293,7 +25324,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder setAttributes(context.ContextOuterClass.LinkAttributes value) {
                 if (attributesBuilder_ == null) {
@@ -24304,13 +25335,13 @@ public final class ContextOuterClass {
                 } else {
                     attributesBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder setAttributes(context.ContextOuterClass.LinkAttributes.Builder builderForValue) {
                 if (attributesBuilder_ == null) {
@@ -24318,17 +25349,17 @@ public final class ContextOuterClass {
                 } else {
                     attributesBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder mergeAttributes(context.ContextOuterClass.LinkAttributes value) {
                 if (attributesBuilder_ == null) {
-                    if (((bitField0_ & 0x00000008) != 0) && attributes_ != null && attributes_ != context.ContextOuterClass.LinkAttributes.getDefaultInstance()) {
+                    if (((bitField0_ & 0x00000010) != 0) && attributes_ != null && attributes_ != context.ContextOuterClass.LinkAttributes.getDefaultInstance()) {
                         getAttributesBuilder().mergeFrom(value);
                     } else {
                         attributes_ = value;
@@ -24336,16 +25367,16 @@ public final class ContextOuterClass {
                 } else {
                     attributesBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder clearAttributes() {
-                bitField0_ = (bitField0_ & ~0x00000008);
+                bitField0_ = (bitField0_ & ~0x00000010);
                 attributes_ = null;
                 if (attributesBuilder_ != null) {
                     attributesBuilder_.dispose();
@@ -24356,16 +25387,16 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public context.ContextOuterClass.LinkAttributes.Builder getAttributesBuilder() {
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getAttributesFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder() {
                 if (attributesBuilder_ != null) {
@@ -24376,7 +25407,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.LinkAttributes, context.ContextOuterClass.LinkAttributes.Builder, context.ContextOuterClass.LinkAttributesOrBuilder> getAttributesFieldBuilder() {
                 if (attributesBuilder_ == null) {
@@ -58566,10 +59597,10 @@ public final class ContextOuterClass {
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>float start_timestamp = 1;</code>
+         * <code>double start_timestamp = 1;</code>
          * @return The startTimestamp.
          */
-        float getStartTimestamp();
+        double getStartTimestamp();
 
         /**
          * <code>float duration_days = 2;</code>
@@ -58611,14 +59642,14 @@ public final class ContextOuterClass {
 
         public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
 
-        private float startTimestamp_ = 0F;
+        private double startTimestamp_ = 0D;
 
         /**
-         * <code>float start_timestamp = 1;</code>
+         * <code>double start_timestamp = 1;</code>
          * @return The startTimestamp.
          */
         @java.lang.Override
-        public float getStartTimestamp() {
+        public double getStartTimestamp() {
             return startTimestamp_;
         }
 
@@ -58650,8 +59681,8 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (java.lang.Float.floatToRawIntBits(startTimestamp_) != 0) {
-                output.writeFloat(1, startTimestamp_);
+            if (java.lang.Double.doubleToRawLongBits(startTimestamp_) != 0) {
+                output.writeDouble(1, startTimestamp_);
             }
             if (java.lang.Float.floatToRawIntBits(durationDays_) != 0) {
                 output.writeFloat(2, durationDays_);
@@ -58665,8 +59696,8 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (java.lang.Float.floatToRawIntBits(startTimestamp_) != 0) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, startTimestamp_);
+            if (java.lang.Double.doubleToRawLongBits(startTimestamp_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeDoubleSize(1, startTimestamp_);
             }
             if (java.lang.Float.floatToRawIntBits(durationDays_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, durationDays_);
@@ -58685,7 +59716,7 @@ public final class ContextOuterClass {
                 return super.equals(obj);
             }
             context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
-            if (java.lang.Float.floatToIntBits(getStartTimestamp()) != java.lang.Float.floatToIntBits(other.getStartTimestamp()))
+            if (java.lang.Double.doubleToLongBits(getStartTimestamp()) != java.lang.Double.doubleToLongBits(other.getStartTimestamp()))
                 return false;
             if (java.lang.Float.floatToIntBits(getDurationDays()) != java.lang.Float.floatToIntBits(other.getDurationDays()))
                 return false;
@@ -58702,7 +59733,7 @@ public final class ContextOuterClass {
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getStartTimestamp());
+            hash = (53 * hash) + com.google.protobuf.Internal.hashLong(java.lang.Double.doubleToLongBits(getStartTimestamp()));
             hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getDurationDays());
             hash = (29 * hash) + getUnknownFields().hashCode();
@@ -58809,7 +59840,7 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                startTimestamp_ = 0F;
+                startTimestamp_ = 0D;
                 durationDays_ = 0F;
                 return this;
             }
@@ -58866,7 +59897,7 @@ public final class ContextOuterClass {
             public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
                 if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance())
                     return this;
-                if (other.getStartTimestamp() != 0F) {
+                if (other.getStartTimestamp() != 0D) {
                     setStartTimestamp(other.getStartTimestamp());
                 }
                 if (other.getDurationDays() != 0F) {
@@ -58895,13 +59926,13 @@ public final class ContextOuterClass {
                             case 0:
                                 done = true;
                                 break;
-                            case 13:
+                            case 9:
                                 {
-                                    startTimestamp_ = input.readFloat();
+                                    startTimestamp_ = input.readDouble();
                                     bitField0_ |= 0x00000001;
                                     break;
                                 }
-                            // case 13
+                            // case 9
                             case 21:
                                 {
                                     durationDays_ = input.readFloat();
@@ -58932,23 +59963,23 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private float startTimestamp_;
+            private double startTimestamp_;
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @return The startTimestamp.
              */
             @java.lang.Override
-            public float getStartTimestamp() {
+            public double getStartTimestamp() {
                 return startTimestamp_;
             }
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @param value The startTimestamp to set.
              * @return This builder for chaining.
              */
-            public Builder setStartTimestamp(float value) {
+            public Builder setStartTimestamp(double value) {
                 startTimestamp_ = value;
                 bitField0_ |= 0x00000001;
                 onChanged();
@@ -58956,12 +59987,12 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @return This builder for chaining.
              */
             public Builder clearStartTimestamp() {
                 bitField0_ = (bitField0_ & ~0x00000001);
-                startTimestamp_ = 0F;
+                startTimestamp_ = 0D;
                 onChanged();
                 return this;
             }
@@ -59588,6 +60619,42 @@ public final class ContextOuterClass {
          */
         context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
 
+        /**
+         * <code>string interface = 3;</code>
+         * @return Whether the interface field is set.
+         */
+        boolean hasInterface();
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The interface.
+         */
+        java.lang.String getInterface();
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The bytes for interface.
+         */
+        com.google.protobuf.ByteString getInterfaceBytes();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return Whether the circuitPack field is set.
+         */
+        boolean hasCircuitPack();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The circuitPack.
+         */
+        java.lang.String getCircuitPack();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The bytes for circuitPack.
+         */
+        com.google.protobuf.ByteString getCircuitPackBytes();
+
         context.ContextOuterClass.Location.LocationCase getLocationCase();
     }
 
@@ -59629,7 +60696,7 @@ public final class ContextOuterClass {
 
         public enum LocationCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
 
-            REGION(1), GPS_POSITION(2), LOCATION_NOT_SET(0);
+            REGION(1), GPS_POSITION(2), INTERFACE(3), CIRCUIT_PACK(4), LOCATION_NOT_SET(0);
 
             private final int value;
 
@@ -59653,6 +60720,10 @@ public final class ContextOuterClass {
                         return REGION;
                     case 2:
                         return GPS_POSITION;
+                    case 3:
+                        return INTERFACE;
+                    case 4:
+                        return CIRCUIT_PACK;
                     case 0:
                         return LOCATION_NOT_SET;
                     default:
@@ -59754,6 +60825,108 @@ public final class ContextOuterClass {
             return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
 
+        public static final int INTERFACE_FIELD_NUMBER = 3;
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return Whether the interface field is set.
+         */
+        public boolean hasInterface() {
+            return locationCase_ == 3;
+        }
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The interface.
+         */
+        public java.lang.String getInterface() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 3) {
+                ref = location_;
+            }
+            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();
+                if (locationCase_ == 3) {
+                    location_ = s;
+                }
+                return s;
+            }
+        }
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The bytes for interface.
+         */
+        public com.google.protobuf.ByteString getInterfaceBytes() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 3) {
+                ref = location_;
+            }
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                if (locationCase_ == 3) {
+                    location_ = b;
+                }
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int CIRCUIT_PACK_FIELD_NUMBER = 4;
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return Whether the circuitPack field is set.
+         */
+        public boolean hasCircuitPack() {
+            return locationCase_ == 4;
+        }
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The circuitPack.
+         */
+        public java.lang.String getCircuitPack() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 4) {
+                ref = location_;
+            }
+            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();
+                if (locationCase_ == 4) {
+                    location_ = s;
+                }
+                return s;
+            }
+        }
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The bytes for circuitPack.
+         */
+        public com.google.protobuf.ByteString getCircuitPackBytes() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 4) {
+                ref = location_;
+            }
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                if (locationCase_ == 4) {
+                    location_ = b;
+                }
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -59775,6 +60948,12 @@ public final class ContextOuterClass {
             if (locationCase_ == 2) {
                 output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
             }
+            if (locationCase_ == 3) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, location_);
+            }
+            if (locationCase_ == 4) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, location_);
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -59790,6 +60969,12 @@ public final class ContextOuterClass {
             if (locationCase_ == 2) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
             }
+            if (locationCase_ == 3) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, location_);
+            }
+            if (locationCase_ == 4) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, location_);
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -59815,6 +61000,14 @@ public final class ContextOuterClass {
                     if (!getGpsPosition().equals(other.getGpsPosition()))
                         return false;
                     break;
+                case 3:
+                    if (!getInterface().equals(other.getInterface()))
+                        return false;
+                    break;
+                case 4:
+                    if (!getCircuitPack().equals(other.getCircuitPack()))
+                        return false;
+                    break;
                 case 0:
                 default:
             }
@@ -59839,6 +61032,14 @@ public final class ContextOuterClass {
                     hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
                     hash = (53 * hash) + getGpsPosition().hashCode();
                     break;
+                case 3:
+                    hash = (37 * hash) + INTERFACE_FIELD_NUMBER;
+                    hash = (53 * hash) + getInterface().hashCode();
+                    break;
+                case 4:
+                    hash = (37 * hash) + CIRCUIT_PACK_FIELD_NUMBER;
+                    hash = (53 * hash) + getCircuitPack().hashCode();
+                    break;
                 case 0:
                 default:
             }
@@ -60022,6 +61223,20 @@ public final class ContextOuterClass {
                             mergeGpsPosition(other.getGpsPosition());
                             break;
                         }
+                    case INTERFACE:
+                        {
+                            locationCase_ = 3;
+                            location_ = other.location_;
+                            onChanged();
+                            break;
+                        }
+                    case CIRCUIT_PACK:
+                        {
+                            locationCase_ = 4;
+                            location_ = other.location_;
+                            onChanged();
+                            break;
+                        }
                     case LOCATION_NOT_SET:
                         {
                             break;
@@ -60065,6 +61280,22 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 18
+                            case 26:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    locationCase_ = 3;
+                                    location_ = s;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    locationCase_ = 4;
+                                    location_ = s;
+                                    break;
+                                }
+                            // case 34
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -60340,6 +61571,198 @@ public final class ContextOuterClass {
                 return gpsPositionBuilder_;
             }
 
+            /**
+             * <code>string interface = 3;</code>
+             * @return Whether the interface field is set.
+             */
+            @java.lang.Override
+            public boolean hasInterface() {
+                return locationCase_ == 3;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return The interface.
+             */
+            @java.lang.Override
+            public java.lang.String getInterface() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 3) {
+                    ref = location_;
+                }
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    if (locationCase_ == 3) {
+                        location_ = s;
+                    }
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return The bytes for interface.
+             */
+            @java.lang.Override
+            public com.google.protobuf.ByteString getInterfaceBytes() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 3) {
+                    ref = location_;
+                }
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    if (locationCase_ == 3) {
+                        location_ = b;
+                    }
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @param value The interface to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInterface(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                locationCase_ = 3;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearInterface() {
+                if (locationCase_ == 3) {
+                    locationCase_ = 0;
+                    location_ = null;
+                    onChanged();
+                }
+                return this;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @param value The bytes for interface to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInterfaceBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                locationCase_ = 3;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return Whether the circuitPack field is set.
+             */
+            @java.lang.Override
+            public boolean hasCircuitPack() {
+                return locationCase_ == 4;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return The circuitPack.
+             */
+            @java.lang.Override
+            public java.lang.String getCircuitPack() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 4) {
+                    ref = location_;
+                }
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    if (locationCase_ == 4) {
+                        location_ = s;
+                    }
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return The bytes for circuitPack.
+             */
+            @java.lang.Override
+            public com.google.protobuf.ByteString getCircuitPackBytes() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 4) {
+                    ref = location_;
+                }
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    if (locationCase_ == 4) {
+                        location_ = b;
+                    }
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @param value The circuitPack to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCircuitPack(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                locationCase_ = 4;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearCircuitPack() {
+                if (locationCase_ == 4) {
+                    locationCase_ = 0;
+                    location_ = null;
+                    onChanged();
+                }
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @param value The bytes for circuitPack to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCircuitPackBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                locationCase_ = 4;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -65361,6 +66784,1236 @@ public final class ContextOuterClass {
         }
     }
 
+    public interface QoSProfileIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.QoSProfileId)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
+         */
+        boolean hasQosProfileId();
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return The qosProfileId.
+         */
+        context.ContextOuterClass.Uuid getQosProfileId();
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         */
+        context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.QoSProfileId}
+     */
+    public static final class QoSProfileId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.QoSProfileId)
+    QoSProfileIdOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use QoSProfileId.newBuilder() to construct.
+        private QoSProfileId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private QoSProfileId() {
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new QoSProfileId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_QoSProfileId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.QoSProfileId.class, context.ContextOuterClass.QoSProfileId.Builder.class);
+        }
+
+        public static final int QOS_PROFILE_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.Uuid qosProfileId_;
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
+         */
+        @java.lang.Override
+        public boolean hasQosProfileId() {
+            return qosProfileId_ != null;
+        }
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return The qosProfileId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Uuid getQosProfileId() {
+            return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+        }
+
+        /**
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder() {
+            return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+        }
+
+        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 (qosProfileId_ != null) {
+                output.writeMessage(1, getQosProfileId());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (qosProfileId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getQosProfileId());
+            }
+            size += getUnknownFields().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.QoSProfileId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.QoSProfileId other = (context.ContextOuterClass.QoSProfileId) obj;
+            if (hasQosProfileId() != other.hasQosProfileId())
+                return false;
+            if (hasQosProfileId()) {
+                if (!getQosProfileId().equals(other.getQosProfileId()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasQosProfileId()) {
+                hash = (37 * hash) + QOS_PROFILE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getQosProfileId().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId 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.QoSProfileId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId 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.QoSProfileId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId 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.QoSProfileId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.QoSProfileId 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.QoSProfileId 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.QoSProfileId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.QoSProfileId)
+        context.ContextOuterClass.QoSProfileIdOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.QoSProfileId.class, context.ContextOuterClass.QoSProfileId.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.QoSProfileId.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId getDefaultInstanceForType() {
+                return context.ContextOuterClass.QoSProfileId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId build() {
+                context.ContextOuterClass.QoSProfileId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId buildPartial() {
+                context.ContextOuterClass.QoSProfileId result = new context.ContextOuterClass.QoSProfileId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.QoSProfileId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.qosProfileId_ = qosProfileIdBuilder_ == null ? qosProfileId_ : qosProfileIdBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.QoSProfileId) {
+                    return mergeFrom((context.ContextOuterClass.QoSProfileId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.QoSProfileId other) {
+                if (other == context.ContextOuterClass.QoSProfileId.getDefaultInstance())
+                    return this;
+                if (other.hasQosProfileId()) {
+                    mergeQosProfileId(other.getQosProfileId());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getQosProfileIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.Uuid qosProfileId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> qosProfileIdBuilder_;
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             * @return Whether the qosProfileId field is set.
+             */
+            public boolean hasQosProfileId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             * @return The qosProfileId.
+             */
+            public context.ContextOuterClass.Uuid getQosProfileId() {
+                if (qosProfileIdBuilder_ == null) {
+                    return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+                } else {
+                    return qosProfileIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.Uuid value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    qosProfileId_ = value;
+                } else {
+                    qosProfileIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileId_ = builderForValue.build();
+                } else {
+                    qosProfileIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder mergeQosProfileId(context.ContextOuterClass.Uuid value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && qosProfileId_ != null && qosProfileId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getQosProfileIdBuilder().mergeFrom(value);
+                    } else {
+                        qosProfileId_ = value;
+                    }
+                } else {
+                    qosProfileIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder clearQosProfileId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.Uuid.Builder getQosProfileIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getQosProfileIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder() {
+                if (qosProfileIdBuilder_ != null) {
+                    return qosProfileIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+                }
+            }
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getQosProfileIdFieldBuilder() {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getQosProfileId(), getParentForChildren(), isClean());
+                    qosProfileId_ = null;
+                }
+                return qosProfileIdBuilder_;
+            }
+
+            @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.QoSProfileId)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.QoSProfileId)
+        private static final context.ContextOuterClass.QoSProfileId DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.QoSProfileId();
+        }
+
+        public static context.ContextOuterClass.QoSProfileId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<QoSProfileId> PARSER = new com.google.protobuf.AbstractParser<QoSProfileId>() {
+
+            @java.lang.Override
+            public QoSProfileId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<QoSProfileId> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<QoSProfileId> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.QoSProfileId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface Constraint_QoSProfileOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Constraint_QoSProfile)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
+         */
+        boolean hasQosProfileId();
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return The qosProfileId.
+         */
+        context.ContextOuterClass.QoSProfileId getQosProfileId();
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         */
+        context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder();
+
+        /**
+         * <code>string qos_profile_name = 2;</code>
+         * @return The qosProfileName.
+         */
+        java.lang.String getQosProfileName();
+
+        /**
+         * <code>string qos_profile_name = 2;</code>
+         * @return The bytes for qosProfileName.
+         */
+        com.google.protobuf.ByteString getQosProfileNameBytes();
+    }
+
+    /**
+     * Protobuf type {@code context.Constraint_QoSProfile}
+     */
+    public static final class Constraint_QoSProfile extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Constraint_QoSProfile)
+    Constraint_QoSProfileOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use Constraint_QoSProfile.newBuilder() to construct.
+        private Constraint_QoSProfile(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private Constraint_QoSProfile() {
+            qosProfileName_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Constraint_QoSProfile();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Constraint_QoSProfile.class, context.ContextOuterClass.Constraint_QoSProfile.Builder.class);
+        }
+
+        public static final int QOS_PROFILE_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.QoSProfileId qosProfileId_;
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
+         */
+        @java.lang.Override
+        public boolean hasQosProfileId() {
+            return qosProfileId_ != null;
+        }
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return The qosProfileId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.QoSProfileId getQosProfileId() {
+            return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
+        }
+
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder() {
+            return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
+        }
+
+        public static final int QOS_PROFILE_NAME_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object qosProfileName_ = "";
+
+        /**
+         * <code>string qos_profile_name = 2;</code>
+         * @return The qosProfileName.
+         */
+        @java.lang.Override
+        public java.lang.String getQosProfileName() {
+            java.lang.Object ref = qosProfileName_;
+            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();
+                qosProfileName_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string qos_profile_name = 2;</code>
+         * @return The bytes for qosProfileName.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getQosProfileNameBytes() {
+            java.lang.Object ref = qosProfileName_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                qosProfileName_ = 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 (qosProfileId_ != null) {
+                output.writeMessage(1, getQosProfileId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(qosProfileName_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, qosProfileName_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (qosProfileId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getQosProfileId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(qosProfileName_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, qosProfileName_);
+            }
+            size += getUnknownFields().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_QoSProfile)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.Constraint_QoSProfile other = (context.ContextOuterClass.Constraint_QoSProfile) obj;
+            if (hasQosProfileId() != other.hasQosProfileId())
+                return false;
+            if (hasQosProfileId()) {
+                if (!getQosProfileId().equals(other.getQosProfileId()))
+                    return false;
+            }
+            if (!getQosProfileName().equals(other.getQosProfileName()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasQosProfileId()) {
+                hash = (37 * hash) + QOS_PROFILE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getQosProfileId().hashCode();
+            }
+            hash = (37 * hash) + QOS_PROFILE_NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getQosProfileName().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile 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_QoSProfile parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile 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_QoSProfile parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile 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_QoSProfile parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile 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_QoSProfile parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile 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_QoSProfile 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.Constraint_QoSProfile}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.Constraint_QoSProfile)
+        context.ContextOuterClass.Constraint_QoSProfileOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Constraint_QoSProfile.class, context.ContextOuterClass.Constraint_QoSProfile.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.Constraint_QoSProfile.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                qosProfileName_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_QoSProfile getDefaultInstanceForType() {
+                return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_QoSProfile build() {
+                context.ContextOuterClass.Constraint_QoSProfile result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_QoSProfile buildPartial() {
+                context.ContextOuterClass.Constraint_QoSProfile result = new context.ContextOuterClass.Constraint_QoSProfile(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.Constraint_QoSProfile result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.qosProfileId_ = qosProfileIdBuilder_ == null ? qosProfileId_ : qosProfileIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.qosProfileName_ = qosProfileName_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.Constraint_QoSProfile) {
+                    return mergeFrom((context.ContextOuterClass.Constraint_QoSProfile) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.Constraint_QoSProfile other) {
+                if (other == context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance())
+                    return this;
+                if (other.hasQosProfileId()) {
+                    mergeQosProfileId(other.getQosProfileId());
+                }
+                if (!other.getQosProfileName().isEmpty()) {
+                    qosProfileName_ = other.qosProfileName_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getQosProfileIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    qosProfileName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.QoSProfileId qosProfileId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder> qosProfileIdBuilder_;
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             * @return Whether the qosProfileId field is set.
+             */
+            public boolean hasQosProfileId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             * @return The qosProfileId.
+             */
+            public context.ContextOuterClass.QoSProfileId getQosProfileId() {
+                if (qosProfileIdBuilder_ == null) {
+                    return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
+                } else {
+                    return qosProfileIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.QoSProfileId value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    qosProfileId_ = value;
+                } else {
+                    qosProfileIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.QoSProfileId.Builder builderForValue) {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileId_ = builderForValue.build();
+                } else {
+                    qosProfileIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public Builder mergeQosProfileId(context.ContextOuterClass.QoSProfileId value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && qosProfileId_ != null && qosProfileId_ != context.ContextOuterClass.QoSProfileId.getDefaultInstance()) {
+                        getQosProfileIdBuilder().mergeFrom(value);
+                    } else {
+                        qosProfileId_ = value;
+                    }
+                } else {
+                    qosProfileIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public Builder clearQosProfileId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.QoSProfileId.Builder getQosProfileIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getQosProfileIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder() {
+                if (qosProfileIdBuilder_ != null) {
+                    return qosProfileIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
+                }
+            }
+
+            /**
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder> getQosProfileIdFieldBuilder() {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder>(getQosProfileId(), getParentForChildren(), isClean());
+                    qosProfileId_ = null;
+                }
+                return qosProfileIdBuilder_;
+            }
+
+            private java.lang.Object qosProfileName_ = "";
+
+            /**
+             * <code>string qos_profile_name = 2;</code>
+             * @return The qosProfileName.
+             */
+            public java.lang.String getQosProfileName() {
+                java.lang.Object ref = qosProfileName_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    qosProfileName_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string qos_profile_name = 2;</code>
+             * @return The bytes for qosProfileName.
+             */
+            public com.google.protobuf.ByteString getQosProfileNameBytes() {
+                java.lang.Object ref = qosProfileName_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    qosProfileName_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string qos_profile_name = 2;</code>
+             * @param value The qosProfileName to set.
+             * @return This builder for chaining.
+             */
+            public Builder setQosProfileName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                qosProfileName_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string qos_profile_name = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearQosProfileName() {
+                qosProfileName_ = getDefaultInstance().getQosProfileName();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string qos_profile_name = 2;</code>
+             * @param value The bytes for qosProfileName to set.
+             * @return This builder for chaining.
+             */
+            public Builder setQosProfileNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                qosProfileName_ = value;
+                bitField0_ |= 0x00000002;
+                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_QoSProfile)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.Constraint_QoSProfile)
+        private static final context.ContextOuterClass.Constraint_QoSProfile DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_QoSProfile();
+        }
+
+        public static context.ContextOuterClass.Constraint_QoSProfile getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<Constraint_QoSProfile> PARSER = new com.google.protobuf.AbstractParser<Constraint_QoSProfile>() {
+
+            @java.lang.Override
+            public Constraint_QoSProfile parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<Constraint_QoSProfile> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<Constraint_QoSProfile> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfile getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
     public interface ConstraintOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Constraint)
     com.google.protobuf.MessageOrBuilder {
 
@@ -65529,6 +68182,23 @@ public final class ContextOuterClass {
          */
         context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder();
 
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return Whether the qosProfile field is set.
+         */
+        boolean hasQosProfile();
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return The qosProfile.
+         */
+        context.ContextOuterClass.Constraint_QoSProfile getQosProfile();
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         */
+        context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder();
+
         context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
     }
 
@@ -65580,6 +68250,7 @@ public final class ContextOuterClass {
             SLA_AVAILABILITY(8),
             SLA_ISOLATION(9),
             EXCLUSIONS(10),
+            QOS_PROFILE(11),
             CONSTRAINT_NOT_SET(0);
 
             private final int value;
@@ -65618,6 +68289,8 @@ public final class ContextOuterClass {
                         return SLA_ISOLATION;
                     case 10:
                         return EXCLUSIONS;
+                    case 11:
+                        return QOS_PROFILE;
                     case 0:
                         return CONSTRAINT_NOT_SET;
                     default:
@@ -65963,6 +68636,40 @@ public final class ContextOuterClass {
             return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
         }
 
+        public static final int QOS_PROFILE_FIELD_NUMBER = 11;
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return Whether the qosProfile field is set.
+         */
+        @java.lang.Override
+        public boolean hasQosProfile() {
+            return constraintCase_ == 11;
+        }
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return The qosProfile.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfile getQosProfile() {
+            if (constraintCase_ == 11) {
+                return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder() {
+            if (constraintCase_ == 11) {
+                return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -66008,6 +68715,9 @@ public final class ContextOuterClass {
             if (constraintCase_ == 10) {
                 output.writeMessage(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
             }
+            if (constraintCase_ == 11) {
+                output.writeMessage(11, (context.ContextOuterClass.Constraint_QoSProfile) constraint_);
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -66047,6 +68757,9 @@ public final class ContextOuterClass {
             if (constraintCase_ == 10) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
             }
+            if (constraintCase_ == 11) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, (context.ContextOuterClass.Constraint_QoSProfile) constraint_);
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -66102,6 +68815,10 @@ public final class ContextOuterClass {
                     if (!getExclusions().equals(other.getExclusions()))
                         return false;
                     break;
+                case 11:
+                    if (!getQosProfile().equals(other.getQosProfile()))
+                        return false;
+                    break;
                 case 0:
                 default:
             }
@@ -66156,6 +68873,10 @@ public final class ContextOuterClass {
                     hash = (37 * hash) + EXCLUSIONS_FIELD_NUMBER;
                     hash = (53 * hash) + getExclusions().hashCode();
                     break;
+                case 11:
+                    hash = (37 * hash) + QOS_PROFILE_FIELD_NUMBER;
+                    hash = (53 * hash) + getQosProfile().hashCode();
+                    break;
                 case 0:
                 default:
             }
@@ -66291,6 +69012,9 @@ public final class ContextOuterClass {
                 if (exclusionsBuilder_ != null) {
                     exclusionsBuilder_.clear();
                 }
+                if (qosProfileBuilder_ != null) {
+                    qosProfileBuilder_.clear();
+                }
                 constraintCase_ = 0;
                 constraint_ = null;
                 return this;
@@ -66363,6 +69087,9 @@ public final class ContextOuterClass {
                 if (constraintCase_ == 10 && exclusionsBuilder_ != null) {
                     result.constraint_ = exclusionsBuilder_.build();
                 }
+                if (constraintCase_ == 11 && qosProfileBuilder_ != null) {
+                    result.constraint_ = qosProfileBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -66427,6 +69154,11 @@ public final class ContextOuterClass {
                             mergeExclusions(other.getExclusions());
                             break;
                         }
+                    case QOS_PROFILE:
+                        {
+                            mergeQosProfile(other.getQosProfile());
+                            break;
+                        }
                     case CONSTRAINT_NOT_SET:
                         {
                             break;
@@ -66525,6 +69257,13 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 82
+                            case 90:
+                                {
+                                    input.readMessage(getQosProfileFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 11;
+                                    break;
+                                }
+                            // case 90
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -67891,6 +70630,147 @@ public final class ContextOuterClass {
                 return exclusionsBuilder_;
             }
 
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder> qosProfileBuilder_;
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             * @return Whether the qosProfile field is set.
+             */
+            @java.lang.Override
+            public boolean hasQosProfile() {
+                return constraintCase_ == 11;
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             * @return The qosProfile.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_QoSProfile getQosProfile() {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11) {
+                        return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 11) {
+                        return qosProfileBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            public Builder setQosProfile(context.ContextOuterClass.Constraint_QoSProfile value) {
+                if (qosProfileBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    qosProfileBuilder_.setMessage(value);
+                }
+                constraintCase_ = 11;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            public Builder setQosProfile(context.ContextOuterClass.Constraint_QoSProfile.Builder builderForValue) {
+                if (qosProfileBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    qosProfileBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 11;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            public Builder mergeQosProfile(context.ContextOuterClass.Constraint_QoSProfile value) {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11 && constraint_ != context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_QoSProfile.newBuilder((context.ContextOuterClass.Constraint_QoSProfile) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 11) {
+                        qosProfileBuilder_.mergeFrom(value);
+                    } else {
+                        qosProfileBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 11;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            public Builder clearQosProfile() {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 11) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    qosProfileBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            public context.ContextOuterClass.Constraint_QoSProfile.Builder getQosProfileBuilder() {
+                return getQosProfileFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder() {
+                if ((constraintCase_ == 11) && (qosProfileBuilder_ != null)) {
+                    return qosProfileBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 11) {
+                        return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder> getQosProfileFieldBuilder() {
+                if (qosProfileBuilder_ == null) {
+                    if (!(constraintCase_ == 11)) {
+                        constraint_ = context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                    }
+                    qosProfileBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder>((context.ContextOuterClass.Constraint_QoSProfile) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 11;
+                onChanged();
+                return qosProfileBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -69276,9 +72156,509 @@ public final class ContextOuterClass {
              * <code>bool authenticated = 2;</code>
              * @return This builder for chaining.
              */
-            public Builder clearAuthenticated() {
-                bitField0_ = (bitField0_ & ~0x00000002);
-                authenticated_ = false;
+            public Builder clearAuthenticated() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                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 {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        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;
+        }
+    }
+
+    public interface OpticalConfigIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigId)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
+         */
+        java.lang.String getOpticalconfigUuid();
+
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
+         */
+        com.google.protobuf.ByteString getOpticalconfigUuidBytes();
+    }
+
+    /**
+     * <pre>
+     * ---------------- Experimental ------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.OpticalConfigId}
+     */
+    public static final class OpticalConfigId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigId)
+    OpticalConfigIdOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use OpticalConfigId.newBuilder() to construct.
+        private OpticalConfigId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private OpticalConfigId() {
+            opticalconfigUuid_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new OpticalConfigId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+        }
+
+        public static final int OPTICALCONFIG_UUID_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object opticalconfigUuid_ = "";
+
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
+         */
+        @java.lang.Override
+        public java.lang.String getOpticalconfigUuid() {
+            java.lang.Object ref = opticalconfigUuid_;
+            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();
+                opticalconfigUuid_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+            java.lang.Object ref = opticalconfigUuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                opticalconfigUuid_ = 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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, opticalconfigUuid_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, opticalconfigUuid_);
+            }
+            size += getUnknownFields().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.OpticalConfigId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.OpticalConfigId other = (context.ContextOuterClass.OpticalConfigId) obj;
+            if (!getOpticalconfigUuid().equals(other.getOpticalconfigUuid()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                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) + OPTICALCONFIG_UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getOpticalconfigUuid().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId 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.OpticalConfigId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId 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.OpticalConfigId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId 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.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.OpticalConfigId 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.OpticalConfigId 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>
+         * ---------------- Experimental ------------------------
+         * </pre>
+         *
+         * Protobuf type {@code context.OpticalConfigId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigId)
+        context.ContextOuterClass.OpticalConfigIdOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.OpticalConfigId.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                opticalconfigUuid_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId build() {
+                context.ContextOuterClass.OpticalConfigId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.OpticalConfigId buildPartial() {
+                context.ContextOuterClass.OpticalConfigId result = new context.ContextOuterClass.OpticalConfigId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalconfigUuid_ = opticalconfigUuid_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalConfigId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigId other) {
+                if (other == context.ContextOuterClass.OpticalConfigId.getDefaultInstance())
+                    return this;
+                if (!other.getOpticalconfigUuid().isEmpty()) {
+                    opticalconfigUuid_ = other.opticalconfigUuid_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    opticalconfigUuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object opticalconfigUuid_ = "";
+
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The opticalconfigUuid.
+             */
+            public java.lang.String getOpticalconfigUuid() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    opticalconfigUuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The bytes for opticalconfigUuid.
+             */
+            public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    opticalconfigUuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The opticalconfigUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOpticalconfigUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearOpticalconfigUuid() {
+                opticalconfigUuid_ = getDefaultInstance().getOpticalconfigUuid();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The bytes for opticalconfigUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOpticalconfigUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -69292,24 +72672,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.AuthenticationResult)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigId)
         }
 
-        // @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-        private static final context.ContextOuterClass.AuthenticationResult DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigId)
+        private static final context.ContextOuterClass.OpticalConfigId DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.AuthenticationResult();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigId();
         }
 
-        public static context.ContextOuterClass.AuthenticationResult getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigId getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<AuthenticationResult> PARSER = new com.google.protobuf.AbstractParser<AuthenticationResult>() {
+        private static final com.google.protobuf.Parser<OpticalConfigId> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigId>() {
 
             @java.lang.Override
-            public AuthenticationResult parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalConfigId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -69324,111 +72704,201 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<AuthenticationResult> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigId> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<AuthenticationResult> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigId> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigId)
+    public interface OpticalConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfig)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The opticalconfigUuid.
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
          */
-        java.lang.String getOpticalconfigUuid();
+        boolean hasOpticalconfigId();
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The bytes for opticalconfigUuid.
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
          */
-        com.google.protobuf.ByteString getOpticalconfigUuidBytes();
+        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
+        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
+
+        /**
+         * <code>string config = 2;</code>
+         * @return The config.
+         */
+        java.lang.String getConfig();
+
+        /**
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
+         */
+        com.google.protobuf.ByteString getConfigBytes();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return Whether the deviceId field is set.
+         */
+        boolean hasDeviceId();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return The deviceId.
+         */
+        context.ContextOuterClass.DeviceId getDeviceId();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         */
+        context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
     }
 
     /**
-     * <pre>
-     * ---------------- Experimental ------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.OpticalConfigId}
+     * Protobuf type {@code context.OpticalConfig}
      */
-    public static final class OpticalConfigId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigId)
-    OpticalConfigIdOrBuilder {
+    public static final class OpticalConfig extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfig)
+    OpticalConfigOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfigId.newBuilder() to construct.
-        private OpticalConfigId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfig.newBuilder() to construct.
+        private OpticalConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfigId() {
-            opticalconfigUuid_ = "";
+        private OpticalConfig() {
+            config_ = "";
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfigId();
+            return new OpticalConfig();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
         }
 
-        public static final int OPTICALCONFIG_UUID_FIELD_NUMBER = 1;
+        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
+         */
+        @java.lang.Override
+        public boolean hasOpticalconfigId() {
+            return opticalconfigId_ != null;
+        }
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
+
+        public static final int CONFIG_FIELD_NUMBER = 2;
 
         @SuppressWarnings("serial")
-        private volatile java.lang.Object opticalconfigUuid_ = "";
+        private volatile java.lang.Object config_ = "";
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The opticalconfigUuid.
+         * <code>string config = 2;</code>
+         * @return The config.
          */
         @java.lang.Override
-        public java.lang.String getOpticalconfigUuid() {
-            java.lang.Object ref = opticalconfigUuid_;
+        public java.lang.String getConfig() {
+            java.lang.Object ref = config_;
             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();
-                opticalconfigUuid_ = s;
+                config_ = s;
                 return s;
             }
         }
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The bytes for opticalconfigUuid.
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
-            java.lang.Object ref = opticalconfigUuid_;
+        public com.google.protobuf.ByteString getConfigBytes() {
+            java.lang.Object ref = config_;
             if (ref instanceof java.lang.String) {
                 com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                opticalconfigUuid_ = b;
+                config_ = b;
                 return b;
             } else {
                 return (com.google.protobuf.ByteString) ref;
             }
         }
 
+        public static final int DEVICE_ID_FIELD_NUMBER = 3;
+
+        private context.ContextOuterClass.DeviceId deviceId_;
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return Whether the deviceId field is set.
+         */
+        @java.lang.Override
+        public boolean hasDeviceId() {
+            return deviceId_ != null;
+        }
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</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 = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -69444,8 +72914,14 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, opticalconfigUuid_);
+            if (opticalconfigId_ != null) {
+                output.writeMessage(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_);
+            }
+            if (deviceId_ != null) {
+                output.writeMessage(3, getDeviceId());
             }
             getUnknownFields().writeTo(output);
         }
@@ -69456,8 +72932,14 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, opticalconfigUuid_);
+            if (opticalconfigId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_);
+            }
+            if (deviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getDeviceId());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -69469,12 +72951,24 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfigId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfig)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfigId other = (context.ContextOuterClass.OpticalConfigId) obj;
-            if (!getOpticalconfigUuid().equals(other.getOpticalconfigUuid()))
+            context.ContextOuterClass.OpticalConfig other = (context.ContextOuterClass.OpticalConfig) obj;
+            if (hasOpticalconfigId() != other.hasOpticalconfigId())
+                return false;
+            if (hasOpticalconfigId()) {
+                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
+                    return false;
+            }
+            if (!getConfig().equals(other.getConfig()))
+                return false;
+            if (hasDeviceId() != other.hasDeviceId())
                 return false;
+            if (hasDeviceId()) {
+                if (!getDeviceId().equals(other.getDeviceId()))
+                    return false;
+            }
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -69487,58 +72981,66 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + OPTICALCONFIG_UUID_FIELD_NUMBER;
-            hash = (53 * hash) + getOpticalconfigUuid().hashCode();
+            if (hasOpticalconfigId()) {
+                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigId().hashCode();
+            }
+            hash = (37 * hash) + CONFIG_FIELD_NUMBER;
+            hash = (53 * hash) + getConfig().hashCode();
+            if (hasDeviceId()) {
+                hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getDeviceId().hashCode();
+            }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -69551,7 +73053,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfig prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -69567,25 +73069,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <pre>
-         * ---------------- Experimental ------------------------
-         * </pre>
-         *
-         * Protobuf type {@code context.OpticalConfigId}
+         * Protobuf type {@code context.OpticalConfig}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigId)
-        context.ContextOuterClass.OpticalConfigIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfig)
+        context.ContextOuterClass.OpticalConfigOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfigId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfig.newBuilder()
             private Builder() {
             }
 
@@ -69597,23 +73095,33 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                opticalconfigUuid_ = "";
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                config_ = "";
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfigId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfig.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId build() {
-                context.ContextOuterClass.OpticalConfigId result = buildPartial();
+            public context.ContextOuterClass.OpticalConfig build() {
+                context.ContextOuterClass.OpticalConfig result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -69621,8 +73129,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId buildPartial() {
-                context.ContextOuterClass.OpticalConfigId result = new context.ContextOuterClass.OpticalConfigId(this);
+            public context.ContextOuterClass.OpticalConfig buildPartial() {
+                context.ContextOuterClass.OpticalConfig result = new context.ContextOuterClass.OpticalConfig(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -69630,31 +73138,43 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartial0(context.ContextOuterClass.OpticalConfigId result) {
+            private void buildPartial0(context.ContextOuterClass.OpticalConfig result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.opticalconfigUuid_ = opticalconfigUuid_;
+                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.config_ = config_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
                 }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfigId) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfigId) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfig) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfig) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigId other) {
-                if (other == context.ContextOuterClass.OpticalConfigId.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfig other) {
+                if (other == context.ContextOuterClass.OpticalConfig.getDefaultInstance())
                     return this;
-                if (!other.getOpticalconfigUuid().isEmpty()) {
-                    opticalconfigUuid_ = other.opticalconfigUuid_;
-                    bitField0_ |= 0x00000001;
+                if (other.hasOpticalconfigId()) {
+                    mergeOpticalconfigId(other.getOpticalconfigId());
+                }
+                if (!other.getConfig().isEmpty()) {
+                    config_ = other.config_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
+                if (other.hasDeviceId()) {
+                    mergeDeviceId(other.getDeviceId());
+                }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
@@ -69680,11 +73200,25 @@ public final class ContextOuterClass {
                                 break;
                             case 10:
                                 {
-                                    opticalconfigUuid_ = input.readStringRequireUtf8();
+                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000001;
                                     break;
                                 }
                             // case 10
+                            case 18:
+                                {
+                                    config_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -69702,87 +73236,323 @@ public final class ContextOuterClass {
                 } finally {
                     onChanged();
                 }
-                // finally
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return Whether the opticalconfigId field is set.
+             */
+            public boolean hasOpticalconfigId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return The opticalconfigId.
+             */
+            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+                if (opticalconfigIdBuilder_ == null) {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                } else {
+                    return opticalconfigIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalconfigId_ = value;
+                } else {
+                    opticalconfigIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigId_ = builderForValue.build();
+                } else {
+                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
+                        getOpticalconfigIdBuilder().mergeFrom(value);
+                    } else {
+                        opticalconfigId_ = value;
+                    }
+                } else {
+                    opticalconfigIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder clearOpticalconfigId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getOpticalconfigIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+                if (opticalconfigIdBuilder_ != null) {
+                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
+                    opticalconfigId_ = null;
+                }
+                return opticalconfigIdBuilder_;
+            }
+
+            private java.lang.Object config_ = "";
+
+            /**
+             * <code>string config = 2;</code>
+             * @return The config.
+             */
+            public java.lang.String getConfig() {
+                java.lang.Object ref = config_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    config_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @return The bytes for config.
+             */
+            public com.google.protobuf.ByteString getConfigBytes() {
+                java.lang.Object ref = config_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    config_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @param value The config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfig(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearConfig() {
+                config_ = getDefaultInstance().getConfig();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @param value The bytes for config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfigBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
-            private int bitField0_;
+            private context.ContextOuterClass.DeviceId deviceId_;
 
-            private java.lang.Object opticalconfigUuid_ = "";
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return The opticalconfigUuid.
+             * <code>.context.DeviceId device_id = 3;</code>
+             * @return Whether the deviceId field is set.
              */
-            public java.lang.String getOpticalconfigUuid() {
-                java.lang.Object ref = opticalconfigUuid_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    opticalconfigUuid_ = s;
-                    return s;
+            public boolean hasDeviceId() {
+                return ((bitField0_ & 0x00000004) != 0);
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
+             * @return The deviceId.
+             */
+            public context.ContextOuterClass.DeviceId getDeviceId() {
+                if (deviceIdBuilder_ == null) {
+                    return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
                 } else {
-                    return (java.lang.String) ref;
+                    return deviceIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return The bytes for opticalconfigUuid.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
-                java.lang.Object ref = opticalconfigUuid_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    opticalconfigUuid_ = b;
-                    return b;
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    deviceId_ = value;
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @param value The opticalconfigUuid to set.
-             * @return This builder for chaining.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder setOpticalconfigUuid(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
+                if (deviceIdBuilder_ == null) {
+                    deviceId_ = builderForValue.build();
+                } else {
+                    deviceIdBuilder_.setMessage(builderForValue.build());
                 }
-                opticalconfigUuid_ = value;
-                bitField0_ |= 0x00000001;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return This builder for chaining.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder clearOpticalconfigUuid() {
-                opticalconfigUuid_ = getDefaultInstance().getOpticalconfigUuid();
-                bitField0_ = (bitField0_ & ~0x00000001);
+            public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000004) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
+                    } else {
+                        deviceId_ = value;
+                    }
+                } else {
+                    deviceIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @param value The bytes for opticalconfigUuid to set.
-             * @return This builder for chaining.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder setOpticalconfigUuidBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder clearDeviceId() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
                 }
-                checkByteStringIsUtf8(value);
-                opticalconfigUuid_ = value;
-                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
+             */
+            public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return getDeviceIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</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 = 3;</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);
@@ -69792,24 +73562,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfigId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfig)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfigId)
-        private static final context.ContextOuterClass.OpticalConfigId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfig)
+        private static final context.ContextOuterClass.OpticalConfig DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfig();
         }
 
-        public static context.ContextOuterClass.OpticalConfigId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfig getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfigId> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigId>() {
+        private static final com.google.protobuf.Parser<OpticalConfig> PARSER = new com.google.protobuf.AbstractParser<OpticalConfig>() {
 
             @java.lang.Override
-            public OpticalConfigId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -69824,152 +73594,125 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfigId> parser() {
+        public static com.google.protobuf.Parser<OpticalConfig> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfigId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfig> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfig)
+    public interface OpticalConfigListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigList)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return Whether the opticalconfigId field is set.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        boolean hasOpticalconfigId();
+        java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList();
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return The opticalconfigId.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
+        context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index);
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
+        int getOpticalconfigsCount();
 
         /**
-         * <code>string config = 2;</code>
-         * @return The config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        java.lang.String getConfig();
+        java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList();
 
         /**
-         * <code>string config = 2;</code>
-         * @return The bytes for config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        com.google.protobuf.ByteString getConfigBytes();
+        context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.OpticalConfig}
+     * Protobuf type {@code context.OpticalConfigList}
      */
-    public static final class OpticalConfig extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfig)
-    OpticalConfigOrBuilder {
+    public static final class OpticalConfigList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigList)
+    OpticalConfigListOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfig.newBuilder() to construct.
-        private OpticalConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfigList.newBuilder() to construct.
+        private OpticalConfigList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfig() {
-            config_ = "";
+        private OpticalConfigList() {
+            opticalconfigs_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfig();
+            return new OpticalConfigList();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
         }
 
-        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 1;
+        public static final int OPTICALCONFIGS_FIELD_NUMBER = 1;
 
-        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_;
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return Whether the opticalconfigId field is set.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public boolean hasOpticalconfigId() {
-            return opticalconfigId_ != null;
+        public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+            return opticalconfigs_;
         }
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return The opticalconfigId.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
-            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+            return opticalconfigs_;
         }
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
-            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        public int getOpticalconfigsCount() {
+            return opticalconfigs_.size();
         }
 
-        public static final int CONFIG_FIELD_NUMBER = 2;
-
-        @SuppressWarnings("serial")
-        private volatile java.lang.Object config_ = "";
-
         /**
-         * <code>string config = 2;</code>
-         * @return The config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public java.lang.String getConfig() {
-            java.lang.Object ref = config_;
-            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();
-                config_ = s;
-                return s;
-            }
+        public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+            return opticalconfigs_.get(index);
         }
 
         /**
-         * <code>string config = 2;</code>
-         * @return The bytes for config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getConfigBytes() {
-            java.lang.Object ref = config_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                config_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+            return opticalconfigs_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -69987,11 +73730,8 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (opticalconfigId_ != null) {
-                output.writeMessage(1, getOpticalconfigId());
-            }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_);
+            for (int i = 0; i < opticalconfigs_.size(); i++) {
+                output.writeMessage(1, opticalconfigs_.get(i));
             }
             getUnknownFields().writeTo(output);
         }
@@ -70002,11 +73742,8 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (opticalconfigId_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalconfigId());
-            }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_);
+            for (int i = 0; i < opticalconfigs_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalconfigs_.get(i));
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -70018,17 +73755,11 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfig)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigList)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfig other = (context.ContextOuterClass.OpticalConfig) obj;
-            if (hasOpticalconfigId() != other.hasOpticalconfigId())
-                return false;
-            if (hasOpticalconfigId()) {
-                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
-                    return false;
-            }
-            if (!getConfig().equals(other.getConfig()))
+            context.ContextOuterClass.OpticalConfigList other = (context.ContextOuterClass.OpticalConfigList) obj;
+            if (!getOpticalconfigsList().equals(other.getOpticalconfigsList()))
                 return false;
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
@@ -70042,62 +73773,60 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasOpticalconfigId()) {
-                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalconfigId().hashCode();
+            if (getOpticalconfigsCount() > 0) {
+                hash = (37 * hash) + OPTICALCONFIGS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigsList().hashCode();
             }
-            hash = (37 * hash) + CONFIG_FIELD_NUMBER;
-            hash = (53 * hash) + getConfig().hashCode();
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -70110,7 +73839,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfig prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigList prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -70126,21 +73855,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalConfig}
+         * Protobuf type {@code context.OpticalConfigList}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfig)
-        context.ContextOuterClass.OpticalConfigOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigList)
+        context.ContextOuterClass.OpticalConfigListOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfig.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfigList.newBuilder()
             private Builder() {
             }
 
@@ -70152,28 +73881,29 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                opticalconfigId_ = null;
-                if (opticalconfigIdBuilder_ != null) {
-                    opticalconfigIdBuilder_.dispose();
-                    opticalconfigIdBuilder_ = null;
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
+                } else {
+                    opticalconfigs_ = null;
+                    opticalconfigsBuilder_.clear();
                 }
-                config_ = "";
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfig.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigList.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig build() {
-                context.ContextOuterClass.OpticalConfig result = buildPartial();
+            public context.ContextOuterClass.OpticalConfigList build() {
+                context.ContextOuterClass.OpticalConfigList result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -70181,8 +73911,9 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig buildPartial() {
-                context.ContextOuterClass.OpticalConfig result = new context.ContextOuterClass.OpticalConfig(this);
+            public context.ContextOuterClass.OpticalConfigList buildPartial() {
+                context.ContextOuterClass.OpticalConfigList result = new context.ContextOuterClass.OpticalConfigList(this);
+                buildPartialRepeatedFields(result);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -70190,36 +73921,58 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartial0(context.ContextOuterClass.OpticalConfig result) {
-                int from_bitField0_ = bitField0_;
-                if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
-                }
-                if (((from_bitField0_ & 0x00000002) != 0)) {
-                    result.config_ = config_;
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalConfigList result) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.opticalconfigs_ = opticalconfigs_;
+                } else {
+                    result.opticalconfigs_ = opticalconfigsBuilder_.build();
                 }
             }
 
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigList result) {
+                int from_bitField0_ = bitField0_;
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfig) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfig) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfigList) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigList) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfig other) {
-                if (other == context.ContextOuterClass.OpticalConfig.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigList other) {
+                if (other == context.ContextOuterClass.OpticalConfigList.getDefaultInstance())
                     return this;
-                if (other.hasOpticalconfigId()) {
-                    mergeOpticalconfigId(other.getOpticalconfigId());
-                }
-                if (!other.getConfig().isEmpty()) {
-                    config_ = other.config_;
-                    bitField0_ |= 0x00000002;
-                    onChanged();
+                if (opticalconfigsBuilder_ == null) {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigs_.isEmpty()) {
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureOpticalconfigsIsMutable();
+                            opticalconfigs_.addAll(other.opticalconfigs_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigsBuilder_.isEmpty()) {
+                            opticalconfigsBuilder_.dispose();
+                            opticalconfigsBuilder_ = null;
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            opticalconfigsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalconfigsFieldBuilder() : null;
+                        } else {
+                            opticalconfigsBuilder_.addAllMessages(other.opticalconfigs_);
+                        }
+                    }
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
@@ -70246,18 +73999,16 @@ public final class ContextOuterClass {
                                 break;
                             case 10:
                                 {
-                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
-                                    bitField0_ |= 0x00000001;
+                                    context.ContextOuterClass.OpticalConfig m = input.readMessage(context.ContextOuterClass.OpticalConfig.parser(), extensionRegistry);
+                                    if (opticalconfigsBuilder_ == null) {
+                                        ensureOpticalconfigsIsMutable();
+                                        opticalconfigs_.add(m);
+                                    } else {
+                                        opticalconfigsBuilder_.addMessage(m);
+                                    }
                                     break;
                                 }
                             // case 10
-                            case 18:
-                                {
-                                    config_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000002;
-                                    break;
-                                }
-                            // case 18
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -70281,197 +74032,241 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+            private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_ = java.util.Collections.emptyList();
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+            private void ensureOpticalconfigsIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>(opticalconfigs_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> opticalconfigsBuilder_;
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-             * @return Whether the opticalconfigId field is set.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public boolean hasOpticalconfigId() {
-                return ((bitField0_ & 0x00000001) != 0);
+            public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+                if (opticalconfigsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+                } else {
+                    return opticalconfigsBuilder_.getMessageList();
+                }
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-             * @return The opticalconfigId.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
-                if (opticalconfigIdBuilder_ == null) {
-                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+            public int getOpticalconfigsCount() {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.size();
+                } else {
+                    return opticalconfigsBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
+                } else {
+                    return opticalconfigsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, builderForValue.build());
+                    onChanged();
                 } else {
-                    return opticalconfigIdBuilder_.getMessage();
+                    opticalconfigsBuilder_.setMessage(index, builderForValue.build());
                 }
+                return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
-                if (opticalconfigIdBuilder_ == null) {
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalconfigId_ = value;
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(value);
+                    onChanged();
                 } else {
-                    opticalconfigIdBuilder_.setMessage(value);
+                    opticalconfigsBuilder_.addMessage(value);
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
-                if (opticalconfigIdBuilder_ == null) {
-                    opticalconfigId_ = builderForValue.build();
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, value);
+                    onChanged();
                 } else {
-                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
+                    opticalconfigsBuilder_.addMessage(index, value);
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
-                if (opticalconfigIdBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
-                        getOpticalconfigIdBuilder().mergeFrom(value);
-                    } else {
-                        opticalconfigId_ = value;
-                    }
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(builderForValue.build());
+                    onChanged();
                 } else {
-                    opticalconfigIdBuilder_.mergeFrom(value);
+                    opticalconfigsBuilder_.addMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder clearOpticalconfigId() {
-                bitField0_ = (bitField0_ & ~0x00000001);
-                opticalconfigId_ = null;
-                if (opticalconfigIdBuilder_ != null) {
-                    opticalconfigIdBuilder_.dispose();
-                    opticalconfigIdBuilder_ = null;
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(index, builderForValue.build());
                 }
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
-                bitField0_ |= 0x00000001;
-                onChanged();
-                return getOpticalconfigIdFieldBuilder().getBuilder();
+            public Builder addAllOpticalconfigs(java.lang.Iterable<? extends context.ContextOuterClass.OpticalConfig> values) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalconfigs_);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addAllMessages(values);
+                }
+                return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
-                if (opticalconfigIdBuilder_ != null) {
-                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+            public Builder clearOpticalconfigs() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
                 } else {
-                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                    opticalconfigsBuilder_.clear();
                 }
+                return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
-                if (opticalconfigIdBuilder_ == null) {
-                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
-                    opticalconfigId_ = null;
+            public Builder removeOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.remove(index);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.remove(index);
                 }
-                return opticalconfigIdBuilder_;
+                return this;
             }
 
-            private java.lang.Object config_ = "";
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfig.Builder getOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().getBuilder(index);
+            }
 
             /**
-             * <code>string config = 2;</code>
-             * @return The config.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public java.lang.String getConfig() {
-                java.lang.Object ref = config_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    config_ = s;
-                    return s;
+            public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
                 } else {
-                    return (java.lang.String) ref;
+                    return opticalconfigsBuilder_.getMessageOrBuilder(index);
                 }
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @return The bytes for config.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public com.google.protobuf.ByteString getConfigBytes() {
-                java.lang.Object ref = config_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    config_ = b;
-                    return b;
+            public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+                if (opticalconfigsBuilder_ != null) {
+                    return opticalconfigsBuilder_.getMessageOrBuilderList();
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
                 }
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @param value The config to set.
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setConfig(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                config_ = value;
-                bitField0_ |= 0x00000002;
-                onChanged();
-                return this;
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder() {
+                return getOpticalconfigsFieldBuilder().addBuilder(context.ContextOuterClass.OpticalConfig.getDefaultInstance());
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder clearConfig() {
-                config_ = getDefaultInstance().getConfig();
-                bitField0_ = (bitField0_ & ~0x00000002);
-                onChanged();
-                return this;
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalConfig.getDefaultInstance());
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @param value The bytes for config to set.
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setConfigBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public java.util.List<context.ContextOuterClass.OpticalConfig.Builder> getOpticalconfigsBuilderList() {
+                return getOpticalconfigsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsFieldBuilder() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder>(opticalconfigs_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    opticalconfigs_ = null;
                 }
-                checkByteStringIsUtf8(value);
-                config_ = value;
-                bitField0_ |= 0x00000002;
-                onChanged();
-                return this;
+                return opticalconfigsBuilder_;
             }
 
             @java.lang.Override
@@ -70483,24 +74278,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfig)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigList)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfig)
-        private static final context.ContextOuterClass.OpticalConfig DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigList)
+        private static final context.ContextOuterClass.OpticalConfigList DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfig();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigList();
         }
 
-        public static context.ContextOuterClass.OpticalConfig getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigList getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfig> PARSER = new com.google.protobuf.AbstractParser<OpticalConfig>() {
+        private static final com.google.protobuf.Parser<OpticalConfigList> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigList>() {
 
             @java.lang.Override
-            public OpticalConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalConfigList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -70515,125 +74310,148 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfig> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigList> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfig> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigList> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigList)
+    public interface OpticalConfigEventOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigEvent)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return Whether the event field is set.
          */
-        java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList();
+        boolean hasEvent();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return The event.
          */
-        context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index);
+        context.ContextOuterClass.Event getEvent();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
          */
-        int getOpticalconfigsCount();
+        context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return Whether the opticalconfigId field is set.
          */
-        java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList();
+        boolean hasOpticalconfigId();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return The opticalconfigId.
          */
-        context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index);
+        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         */
+        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalConfigList}
+     * Protobuf type {@code context.OpticalConfigEvent}
      */
-    public static final class OpticalConfigList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigList)
-    OpticalConfigListOrBuilder {
+    public static final class OpticalConfigEvent extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigEvent)
+    OpticalConfigEventOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfigList.newBuilder() to construct.
-        private OpticalConfigList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfigEvent.newBuilder() to construct.
+        private OpticalConfigEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfigList() {
-            opticalconfigs_ = java.util.Collections.emptyList();
+        private OpticalConfigEvent() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfigList();
+            return new OpticalConfigEvent();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigEvent.class, context.ContextOuterClass.OpticalConfigEvent.Builder.class);
         }
 
-        public static final int OPTICALCONFIGS_FIELD_NUMBER = 1;
+        public static final int EVENT_FIELD_NUMBER = 1;
 
-        @SuppressWarnings("serial")
-        private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_;
+        private context.ContextOuterClass.Event event_;
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return Whether the event field is set.
          */
         @java.lang.Override
-        public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
-            return opticalconfigs_;
+        public boolean hasEvent() {
+            return event_ != null;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return The event.
          */
         @java.lang.Override
-        public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
-            return opticalconfigs_;
+        public context.ContextOuterClass.Event getEvent() {
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
          */
         @java.lang.Override
-        public int getOpticalconfigsCount() {
-            return opticalconfigs_.size();
+        public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
+        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 2;
+
+        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return Whether the opticalconfigId field is set.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
-            return opticalconfigs_.get(index);
+        public boolean hasOpticalconfigId() {
+            return opticalconfigId_ != null;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return The opticalconfigId.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
-            return opticalconfigs_.get(index);
+        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -70651,8 +74469,11 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            for (int i = 0; i < opticalconfigs_.size(); i++) {
-                output.writeMessage(1, opticalconfigs_.get(i));
+            if (event_ != null) {
+                output.writeMessage(1, getEvent());
+            }
+            if (opticalconfigId_ != null) {
+                output.writeMessage(2, getOpticalconfigId());
             }
             getUnknownFields().writeTo(output);
         }
@@ -70663,8 +74484,11 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            for (int i = 0; i < opticalconfigs_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalconfigs_.get(i));
+            if (event_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEvent());
+            }
+            if (opticalconfigId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOpticalconfigId());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -70676,12 +74500,22 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfigList)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigEvent)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfigList other = (context.ContextOuterClass.OpticalConfigList) obj;
-            if (!getOpticalconfigsList().equals(other.getOpticalconfigsList()))
+            context.ContextOuterClass.OpticalConfigEvent other = (context.ContextOuterClass.OpticalConfigEvent) obj;
+            if (hasEvent() != other.hasEvent())
                 return false;
+            if (hasEvent()) {
+                if (!getEvent().equals(other.getEvent()))
+                    return false;
+            }
+            if (hasOpticalconfigId() != other.hasOpticalconfigId())
+                return false;
+            if (hasOpticalconfigId()) {
+                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
+                    return false;
+            }
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -70694,60 +74528,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (getOpticalconfigsCount() > 0) {
-                hash = (37 * hash) + OPTICALCONFIGS_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalconfigsList().hashCode();
+            if (hasEvent()) {
+                hash = (37 * hash) + EVENT_FIELD_NUMBER;
+                hash = (53 * hash) + getEvent().hashCode();
+            }
+            if (hasOpticalconfigId()) {
+                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigId().hashCode();
             }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -70760,7 +74598,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigList prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigEvent prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -70776,21 +74614,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalConfigList}
+         * Protobuf type {@code context.OpticalConfigEvent}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigList)
-        context.ContextOuterClass.OpticalConfigListOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigEvent)
+        context.ContextOuterClass.OpticalConfigEventOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigEvent.class, context.ContextOuterClass.OpticalConfigEvent.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfigList.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfigEvent.newBuilder()
             private Builder() {
             }
 
@@ -70802,29 +74640,32 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigs_ = java.util.Collections.emptyList();
-                } else {
-                    opticalconfigs_ = null;
-                    opticalconfigsBuilder_.clear();
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
+                    eventBuilder_ = null;
+                }
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
                 }
-                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfigList.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfigEvent getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigEvent.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList build() {
-                context.ContextOuterClass.OpticalConfigList result = buildPartial();
+            public context.ContextOuterClass.OpticalConfigEvent build() {
+                context.ContextOuterClass.OpticalConfigEvent result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -70832,9 +74673,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList buildPartial() {
-                context.ContextOuterClass.OpticalConfigList result = new context.ContextOuterClass.OpticalConfigList(this);
-                buildPartialRepeatedFields(result);
+            public context.ContextOuterClass.OpticalConfigEvent buildPartial() {
+                context.ContextOuterClass.OpticalConfigEvent result = new context.ContextOuterClass.OpticalConfigEvent(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -70842,58 +74682,34 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalConfigList result) {
-                if (opticalconfigsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
-                        opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
-                    }
-                    result.opticalconfigs_ = opticalconfigs_;
-                } else {
-                    result.opticalconfigs_ = opticalconfigsBuilder_.build();
-                }
-            }
-
-            private void buildPartial0(context.ContextOuterClass.OpticalConfigList result) {
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigEvent result) {
                 int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfigList) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfigList) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfigEvent) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigEvent) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigList other) {
-                if (other == context.ContextOuterClass.OpticalConfigList.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigEvent other) {
+                if (other == context.ContextOuterClass.OpticalConfigEvent.getDefaultInstance())
                     return this;
-                if (opticalconfigsBuilder_ == null) {
-                    if (!other.opticalconfigs_.isEmpty()) {
-                        if (opticalconfigs_.isEmpty()) {
-                            opticalconfigs_ = other.opticalconfigs_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
-                        } else {
-                            ensureOpticalconfigsIsMutable();
-                            opticalconfigs_.addAll(other.opticalconfigs_);
-                        }
-                        onChanged();
-                    }
-                } else {
-                    if (!other.opticalconfigs_.isEmpty()) {
-                        if (opticalconfigsBuilder_.isEmpty()) {
-                            opticalconfigsBuilder_.dispose();
-                            opticalconfigsBuilder_ = null;
-                            opticalconfigs_ = other.opticalconfigs_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
-                            opticalconfigsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalconfigsFieldBuilder() : null;
-                        } else {
-                            opticalconfigsBuilder_.addAllMessages(other.opticalconfigs_);
-                        }
-                    }
+                if (other.hasEvent()) {
+                    mergeEvent(other.getEvent());
+                }
+                if (other.hasOpticalconfigId()) {
+                    mergeOpticalconfigId(other.getOpticalconfigId());
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
@@ -70920,16 +74736,18 @@ public final class ContextOuterClass {
                                 break;
                             case 10:
                                 {
-                                    context.ContextOuterClass.OpticalConfig m = input.readMessage(context.ContextOuterClass.OpticalConfig.parser(), extensionRegistry);
-                                    if (opticalconfigsBuilder_ == null) {
-                                        ensureOpticalconfigsIsMutable();
-                                        opticalconfigs_.add(m);
-                                    } else {
-                                        opticalconfigsBuilder_.addMessage(m);
-                                    }
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
                                     break;
                                 }
                             // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -70953,241 +74771,240 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_ = java.util.Collections.emptyList();
-
-            private void ensureOpticalconfigsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
-                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>(opticalconfigs_);
-                    bitField0_ |= 0x00000001;
-                }
-            }
-
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> opticalconfigsBuilder_;
+            private context.ContextOuterClass.Event event_;
 
-            /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
-             */
-            public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
-                if (opticalconfigsBuilder_ == null) {
-                    return java.util.Collections.unmodifiableList(opticalconfigs_);
-                } else {
-                    return opticalconfigsBuilder_.getMessageList();
-                }
-            }
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
+             * @return Whether the event field is set.
              */
-            public int getOpticalconfigsCount() {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.size();
-                } else {
-                    return opticalconfigsBuilder_.getCount();
-                }
+            public boolean hasEvent() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
+             * @return The event.
              */
-            public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.get(index);
+            public context.ContextOuterClass.Event getEvent() {
+                if (eventBuilder_ == null) {
+                    return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
                 } else {
-                    return opticalconfigsBuilder_.getMessage(index);
+                    return eventBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
+            public Builder setEvent(context.ContextOuterClass.Event value) {
+                if (eventBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.set(index, value);
-                    onChanged();
+                    event_ = value;
                 } else {
-                    opticalconfigsBuilder_.setMessage(index, value);
+                    eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.set(index, builderForValue.build());
-                    onChanged();
+            public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
+                if (eventBuilder_ == null) {
+                    event_ = builderForValue.build();
                 } else {
-                    opticalconfigsBuilder_.setMessage(index, builderForValue.build());
+                    eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
+            public Builder mergeEvent(context.ContextOuterClass.Event value) {
+                if (eventBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
+                    } else {
+                        event_ = value;
                     }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(value);
-                    onChanged();
                 } else {
-                    opticalconfigsBuilder_.addMessage(value);
+                    eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(index, value);
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.addMessage(index, value);
+            public Builder clearEvent() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
+                    eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(builderForValue.build());
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.addMessage(builderForValue.build());
-                }
-                return this;
+            public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getEventFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(index, builderForValue.build());
-                    onChanged();
+            public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+                if (eventBuilder_ != null) {
+                    return eventBuilder_.getMessageOrBuilder();
                 } else {
-                    opticalconfigsBuilder_.addMessage(index, builderForValue.build());
+                    return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
                 }
-                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addAllOpticalconfigs(java.lang.Iterable<? extends context.ContextOuterClass.OpticalConfig> values) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalconfigs_);
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.addAllMessages(values);
+            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 this;
+                return eventBuilder_;
             }
 
+            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+             * @return Whether the opticalconfigId field is set.
              */
-            public Builder clearOpticalconfigs() {
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigs_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.clear();
-                }
-                return this;
+            public boolean hasOpticalconfigId() {
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+             * @return The opticalconfigId.
              */
-            public Builder removeOpticalconfigs(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.remove(index);
-                    onChanged();
+            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+                if (opticalconfigIdBuilder_ == null) {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
                 } else {
-                    opticalconfigsBuilder_.remove(index);
+                    return opticalconfigIdBuilder_.getMessage();
                 }
-                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfig.Builder getOpticalconfigsBuilder(int index) {
-                return getOpticalconfigsFieldBuilder().getBuilder(index);
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalconfigId_ = value;
+                } else {
+                    opticalconfigIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.get(index);
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigId_ = builderForValue.build();
                 } else {
-                    return opticalconfigsBuilder_.getMessageOrBuilder(index);
+                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
-                if (opticalconfigsBuilder_ != null) {
-                    return opticalconfigsBuilder_.getMessageOrBuilderList();
+            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
+                        getOpticalconfigIdBuilder().mergeFrom(value);
+                    } else {
+                        opticalconfigId_ = value;
+                    }
                 } else {
-                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+                    opticalconfigIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder() {
-                return getOpticalconfigsFieldBuilder().addBuilder(context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            public Builder clearOpticalconfigId() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder(int index) {
-                return getOpticalconfigsFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getOpticalconfigIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public java.util.List<context.ContextOuterClass.OpticalConfig.Builder> getOpticalconfigsBuilderList() {
-                return getOpticalconfigsFieldBuilder().getBuilderList();
+            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+                if (opticalconfigIdBuilder_ != null) {
+                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                }
             }
 
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsFieldBuilder() {
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder>(opticalconfigs_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
-                    opticalconfigs_ = null;
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
+                    opticalconfigId_ = null;
                 }
-                return opticalconfigsBuilder_;
+                return opticalconfigIdBuilder_;
             }
 
             @java.lang.Override
@@ -71199,24 +75016,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfigList)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigEvent)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfigList)
-        private static final context.ContextOuterClass.OpticalConfigList DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigEvent)
+        private static final context.ContextOuterClass.OpticalConfigEvent DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigList();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigEvent();
         }
 
-        public static context.ContextOuterClass.OpticalConfigList getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigEvent getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfigList> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigList>() {
+        private static final com.google.protobuf.Parser<OpticalConfigEvent> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigEvent>() {
 
             @java.lang.Override
-            public OpticalConfigList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalConfigEvent parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -71231,101 +75048,148 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfigList> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigEvent> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfigList> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigEvent> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigEvent getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkId)
+    public interface OpticalEndPointIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalEndPointId)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <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 hasOpticalLinkUuid();
+        boolean hasEndpointUuid();
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return The endpointUuid.
          */
-        context.ContextOuterClass.Uuid getOpticalLinkUuid();
+        context.ContextOuterClass.Uuid getEndpointUuid();
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
          */
-        context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder();
+        context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalLinkId}
+     * Protobuf type {@code context.OpticalEndPointId}
      */
-    public static final class OpticalLinkId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkId)
-    OpticalLinkIdOrBuilder {
+    public static final class OpticalEndPointId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalEndPointId)
+    OpticalEndPointIdOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLinkId.newBuilder() to construct.
-        private OpticalLinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalEndPointId.newBuilder() to construct.
+        private OpticalEndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLinkId() {
+        private OpticalEndPointId() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLinkId();
+            return new OpticalEndPointId();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalEndPointId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalEndPointId.class, context.ContextOuterClass.OpticalEndPointId.Builder.class);
+        }
+
+        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 deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
-        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 1;
+        public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
 
-        private context.ContextOuterClass.Uuid opticalLinkUuid_;
+        private context.ContextOuterClass.Uuid endpointUuid_;
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return Whether the endpointUuid field is set.
          */
         @java.lang.Override
-        public boolean hasOpticalLinkUuid() {
-            return opticalLinkUuid_ != null;
+        public boolean hasEndpointUuid() {
+            return endpointUuid_ != null;
         }
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return The endpointUuid.
          */
         @java.lang.Override
-        public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.Uuid getEndpointUuid() {
+            return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+            return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -71343,8 +75207,11 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (opticalLinkUuid_ != null) {
-                output.writeMessage(1, getOpticalLinkUuid());
+            if (deviceId_ != null) {
+                output.writeMessage(2, getDeviceId());
+            }
+            if (endpointUuid_ != null) {
+                output.writeMessage(3, getEndpointUuid());
             }
             getUnknownFields().writeTo(output);
         }
@@ -71355,8 +75222,11 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (opticalLinkUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalLinkUuid());
+            if (deviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDeviceId());
+            }
+            if (endpointUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getEndpointUuid());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -71368,14 +75238,20 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLinkId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalEndPointId)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLinkId other = (context.ContextOuterClass.OpticalLinkId) obj;
-            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+            context.ContextOuterClass.OpticalEndPointId other = (context.ContextOuterClass.OpticalEndPointId) obj;
+            if (hasDeviceId() != other.hasDeviceId())
+                return false;
+            if (hasDeviceId()) {
+                if (!getDeviceId().equals(other.getDeviceId()))
+                    return false;
+            }
+            if (hasEndpointUuid() != other.hasEndpointUuid())
                 return false;
-            if (hasOpticalLinkUuid()) {
-                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+            if (hasEndpointUuid()) {
+                if (!getEndpointUuid().equals(other.getEndpointUuid()))
                     return false;
             }
             if (!getUnknownFields().equals(other.getUnknownFields()))
@@ -71390,60 +75266,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasOpticalLinkUuid()) {
-                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalLinkUuid().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) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -71456,7 +75336,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalEndPointId prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -71472,21 +75352,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLinkId}
+         * Protobuf type {@code context.OpticalEndPointId}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkId)
-        context.ContextOuterClass.OpticalLinkIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalEndPointId)
+        context.ContextOuterClass.OpticalEndPointIdOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalEndPointId.class, context.ContextOuterClass.OpticalEndPointId.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLinkId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalEndPointId.newBuilder()
             private Builder() {
             }
 
@@ -71498,27 +75378,32 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                opticalLinkUuid_ = null;
-                if (opticalLinkUuidBuilder_ != null) {
-                    opticalLinkUuidBuilder_.dispose();
-                    opticalLinkUuidBuilder_ = null;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
+                    endpointUuidBuilder_ = null;
                 }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLinkId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalEndPointId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalEndPointId.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId build() {
-                context.ContextOuterClass.OpticalLinkId result = buildPartial();
+            public context.ContextOuterClass.OpticalEndPointId build() {
+                context.ContextOuterClass.OpticalEndPointId result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -71526,8 +75411,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId buildPartial() {
-                context.ContextOuterClass.OpticalLinkId result = new context.ContextOuterClass.OpticalLinkId(this);
+            public context.ContextOuterClass.OpticalEndPointId buildPartial() {
+                context.ContextOuterClass.OpticalEndPointId result = new context.ContextOuterClass.OpticalEndPointId(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -71535,28 +75420,34 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartial0(context.ContextOuterClass.OpticalLinkId result) {
+            private void buildPartial0(context.ContextOuterClass.OpticalEndPointId result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_ == null ? opticalLinkUuid_ : opticalLinkUuidBuilder_.build();
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.endpointUuid_ = endpointUuidBuilder_ == null ? endpointUuid_ : endpointUuidBuilder_.build();
                 }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLinkId) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLinkId) other);
+                if (other instanceof context.ContextOuterClass.OpticalEndPointId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalEndPointId) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkId other) {
-                if (other == context.ContextOuterClass.OpticalLinkId.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalEndPointId other) {
+                if (other == context.ContextOuterClass.OpticalEndPointId.getDefaultInstance())
                     return this;
-                if (other.hasOpticalLinkUuid()) {
-                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                if (other.hasDeviceId()) {
+                    mergeDeviceId(other.getDeviceId());
+                }
+                if (other.hasEndpointUuid()) {
+                    mergeEndpointUuid(other.getEndpointUuid());
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
@@ -71581,13 +75472,20 @@ public final class ContextOuterClass {
                             case 0:
                                 done = true;
                                 break;
-                            case 10:
+                            case 18:
                                 {
-                                    input.readMessage(getOpticalLinkUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000001;
                                     break;
                                 }
-                            // case 10
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getEndpointUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 26
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -71611,41 +75509,41 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private context.ContextOuterClass.Uuid opticalLinkUuid_;
+            private context.ContextOuterClass.DeviceId deviceId_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> opticalLinkUuidBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
-             * @return Whether the opticalLinkUuid field is set.
+             * <code>.context.DeviceId device_id = 2;</code>
+             * @return Whether the deviceId field is set.
              */
-            public boolean hasOpticalLinkUuid() {
+            public boolean hasDeviceId() {
                 return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
-             * @return The opticalLinkUuid.
+             * <code>.context.DeviceId device_id = 2;</code>
+             * @return The deviceId.
              */
-            public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+            public context.ContextOuterClass.DeviceId getDeviceId() {
+                if (deviceIdBuilder_ == null) {
+                    return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
                 } else {
-                    return opticalLinkUuidBuilder_.getMessage();
+                    return deviceIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
-                if (opticalLinkUuidBuilder_ == null) {
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalLinkUuid_ = value;
+                    deviceId_ = value;
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(value);
+                    deviceIdBuilder_.setMessage(value);
                 }
                 bitField0_ |= 0x00000001;
                 onChanged();
@@ -71653,13 +75551,13 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = builderForValue.build();
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
+                if (deviceIdBuilder_ == null) {
+                    deviceId_ = builderForValue.build();
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                    deviceIdBuilder_.setMessage(builderForValue.build());
                 }
                 bitField0_ |= 0x00000001;
                 onChanged();
@@ -71667,17 +75565,17 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0) && opticalLinkUuid_ != null && opticalLinkUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
-                        getOpticalLinkUuidBuilder().mergeFrom(value);
+            public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
-                        opticalLinkUuid_ = value;
+                        deviceId_ = value;
                     }
                 } else {
-                    opticalLinkUuidBuilder_.mergeFrom(value);
+                    deviceIdBuilder_.mergeFrom(value);
                 }
                 bitField0_ |= 0x00000001;
                 onChanged();
@@ -71685,48 +75583,166 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder clearOpticalLinkUuid() {
+            public Builder clearDeviceId() {
                 bitField0_ = (bitField0_ & ~0x00000001);
-                opticalLinkUuid_ = null;
-                if (opticalLinkUuidBuilder_ != null) {
-                    opticalLinkUuidBuilder_.dispose();
-                    opticalLinkUuidBuilder_ = null;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
                 }
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public context.ContextOuterClass.Uuid.Builder getOpticalLinkUuidBuilder() {
+            public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
                 bitField0_ |= 0x00000001;
                 onChanged();
-                return getOpticalLinkUuidFieldBuilder().getBuilder();
+                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 ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <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;
+                } else {
+                    endpointUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder setEndpointUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (endpointUuidBuilder_ == null) {
+                    endpointUuid_ = builderForValue.build();
+                } else {
+                    endpointUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+                if (endpointUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && endpointUuid_ != null && endpointUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getEndpointUuidBuilder().mergeFrom(value);
+                    } else {
+                        endpointUuid_ = value;
+                    }
+                } else {
+                    endpointUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder clearEndpointUuid() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
+                    endpointUuidBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getEndpointUuidFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
-            public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
-                if (opticalLinkUuidBuilder_ != null) {
-                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+                if (endpointUuidBuilder_ != null) {
+                    return endpointUuidBuilder_.getMessageOrBuilder();
                 } else {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+                    return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
                 }
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getOpticalLinkUuidFieldBuilder() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
-                    opticalLinkUuid_ = null;
+            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 opticalLinkUuidBuilder_;
+                return endpointUuidBuilder_;
             }
 
             @java.lang.Override
@@ -71738,24 +75754,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLinkId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalEndPointId)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLinkId)
-        private static final context.ContextOuterClass.OpticalLinkId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalEndPointId)
+        private static final context.ContextOuterClass.OpticalEndPointId DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalEndPointId();
         }
 
-        public static context.ContextOuterClass.OpticalLinkId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalEndPointId getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLinkId> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkId>() {
+        private static final com.google.protobuf.Parser<OpticalEndPointId> PARSER = new com.google.protobuf.AbstractParser<OpticalEndPointId>() {
 
             @java.lang.Override
-            public OpticalLinkId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalEndPointId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -71770,101 +75786,125 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLinkId> parser() {
+        public static com.google.protobuf.Parser<OpticalEndPointId> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLinkId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalEndPointId> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalEndPointId getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface FiberIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.FiberId)
+    public interface OpticalLinkListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkList)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        boolean hasFiberUuid();
+        context.ContextOuterClass.OpticalLink getOpticalLinks(int index);
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return The fiberUuid.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        context.ContextOuterClass.Uuid getFiberUuid();
+        int getOpticalLinksCount();
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder();
+        java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.FiberId}
+     * Protobuf type {@code context.OpticalLinkList}
      */
-    public static final class FiberId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.FiberId)
-    FiberIdOrBuilder {
+    public static final class OpticalLinkList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkList)
+    OpticalLinkListOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use FiberId.newBuilder() to construct.
-        private FiberId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLinkList.newBuilder() to construct.
+        private OpticalLinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private FiberId() {
+        private OpticalLinkList() {
+            opticalLinks_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new FiberId();
+            return new OpticalLinkList();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalLinkList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkList.class, context.ContextOuterClass.OpticalLinkList.Builder.class);
         }
 
-        public static final int FIBER_UUID_FIELD_NUMBER = 1;
+        public static final int OPTICAL_LINKS_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_;
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+            return opticalLinks_;
+        }
 
-        private context.ContextOuterClass.Uuid fiberUuid_;
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+            return opticalLinks_;
+        }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public boolean hasFiberUuid() {
-            return fiberUuid_ != null;
+        public int getOpticalLinksCount() {
+            return opticalLinks_.size();
         }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return The fiberUuid.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.Uuid getFiberUuid() {
-            return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+        public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+            return opticalLinks_.get(index);
         }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
-            return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+        public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+            return opticalLinks_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -71882,8 +75922,8 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (fiberUuid_ != null) {
-                output.writeMessage(1, getFiberUuid());
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                output.writeMessage(1, opticalLinks_.get(i));
             }
             getUnknownFields().writeTo(output);
         }
@@ -71894,8 +75934,8 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (fiberUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getFiberUuid());
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalLinks_.get(i));
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -71907,16 +75947,12 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.FiberId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLinkList)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.FiberId other = (context.ContextOuterClass.FiberId) obj;
-            if (hasFiberUuid() != other.hasFiberUuid())
+            context.ContextOuterClass.OpticalLinkList other = (context.ContextOuterClass.OpticalLinkList) obj;
+            if (!getOpticalLinksList().equals(other.getOpticalLinksList()))
                 return false;
-            if (hasFiberUuid()) {
-                if (!getFiberUuid().equals(other.getFiberUuid()))
-                    return false;
-            }
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -71929,60 +75965,60 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasFiberUuid()) {
-                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getFiberUuid().hashCode();
+            if (getOpticalLinksCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINKS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinksList().hashCode();
             }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -71995,7 +76031,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.FiberId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkList prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -72011,21 +76047,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.FiberId}
+         * Protobuf type {@code context.OpticalLinkList}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.FiberId)
-        context.ContextOuterClass.FiberIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkList)
+        context.ContextOuterClass.OpticalLinkListOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkList.class, context.ContextOuterClass.OpticalLinkList.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.FiberId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLinkList.newBuilder()
             private Builder() {
             }
 
@@ -72037,27 +76073,29 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                fiberUuid_ = null;
-                if (fiberUuidBuilder_ != null) {
-                    fiberUuidBuilder_.dispose();
-                    fiberUuidBuilder_ = null;
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                } else {
+                    opticalLinks_ = null;
+                    opticalLinksBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
-                return context.ContextOuterClass.FiberId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLinkList getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkList.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId build() {
-                context.ContextOuterClass.FiberId result = buildPartial();
+            public context.ContextOuterClass.OpticalLinkList build() {
+                context.ContextOuterClass.OpticalLinkList result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -72065,8 +76103,9 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId buildPartial() {
-                context.ContextOuterClass.FiberId result = new context.ContextOuterClass.FiberId(this);
+            public context.ContextOuterClass.OpticalLinkList buildPartial() {
+                context.ContextOuterClass.OpticalLinkList result = new context.ContextOuterClass.OpticalLinkList(this);
+                buildPartialRepeatedFields(result);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -72074,28 +76113,58 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartial0(context.ContextOuterClass.FiberId result) {
-                int from_bitField0_ = bitField0_;
-                if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.fiberUuid_ = fiberUuidBuilder_ == null ? fiberUuid_ : fiberUuidBuilder_.build();
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLinkList result) {
+                if (opticalLinksBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        opticalLinks_ = java.util.Collections.unmodifiableList(opticalLinks_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.opticalLinks_ = opticalLinks_;
+                } else {
+                    result.opticalLinks_ = opticalLinksBuilder_.build();
                 }
             }
 
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkList result) {
+                int from_bitField0_ = bitField0_;
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.FiberId) {
-                    return mergeFrom((context.ContextOuterClass.FiberId) other);
+                if (other instanceof context.ContextOuterClass.OpticalLinkList) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkList) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.FiberId other) {
-                if (other == context.ContextOuterClass.FiberId.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkList other) {
+                if (other == context.ContextOuterClass.OpticalLinkList.getDefaultInstance())
                     return this;
-                if (other.hasFiberUuid()) {
-                    mergeFiberUuid(other.getFiberUuid());
+                if (opticalLinksBuilder_ == null) {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinks_.isEmpty()) {
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureOpticalLinksIsMutable();
+                            opticalLinks_.addAll(other.opticalLinks_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinksBuilder_.isEmpty()) {
+                            opticalLinksBuilder_.dispose();
+                            opticalLinksBuilder_ = null;
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            opticalLinksBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinksFieldBuilder() : null;
+                        } else {
+                            opticalLinksBuilder_.addAllMessages(other.opticalLinks_);
+                        }
+                    }
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
@@ -72122,8 +76191,13 @@ public final class ContextOuterClass {
                                 break;
                             case 10:
                                 {
-                                    input.readMessage(getFiberUuidFieldBuilder().getBuilder(), extensionRegistry);
-                                    bitField0_ |= 0x00000001;
+                                    context.ContextOuterClass.OpticalLink m = input.readMessage(context.ContextOuterClass.OpticalLink.parser(), extensionRegistry);
+                                    if (opticalLinksBuilder_ == null) {
+                                        ensureOpticalLinksIsMutable();
+                                        opticalLinks_.add(m);
+                                    } else {
+                                        opticalLinksBuilder_.addMessage(m);
+                                    }
                                     break;
                                 }
                             // case 10
@@ -72150,122 +76224,241 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private context.ContextOuterClass.Uuid fiberUuid_;
+            private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalLinksIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    opticalLinks_ = new java.util.ArrayList<context.ContextOuterClass.OpticalLink>(opticalLinks_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> fiberUuidBuilder_;
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> opticalLinksBuilder_;
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
-             * @return Whether the fiberUuid field is set.
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public boolean hasFiberUuid() {
-                return ((bitField0_ & 0x00000001) != 0);
+            public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+                if (opticalLinksBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                } else {
+                    return opticalLinksBuilder_.getMessageList();
+                }
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
-             * @return The fiberUuid.
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.Uuid getFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+            public int getOpticalLinksCount() {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.size();
                 } else {
-                    return fiberUuidBuilder_.getMessage();
+                    return opticalLinksBuilder_.getCount();
                 }
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.Uuid value) {
-                if (fiberUuidBuilder_ == null) {
+            public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    fiberUuid_ = value;
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, value);
+                    onChanged();
                 } else {
-                    fiberUuidBuilder_.setMessage(value);
+                    opticalLinksBuilder_.setMessage(index, value);
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = builderForValue.build();
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, builderForValue.build());
+                    onChanged();
                 } else {
-                    fiberUuidBuilder_.setMessage(builderForValue.build());
+                    opticalLinksBuilder_.setMessage(index, builderForValue.build());
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder mergeFiberUuid(context.ContextOuterClass.Uuid value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0) && fiberUuid_ != null && fiberUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
-                        getFiberUuidBuilder().mergeFrom(value);
-                    } else {
-                        fiberUuid_ = value;
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
                     }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(value);
+                    onChanged();
                 } else {
-                    fiberUuidBuilder_.mergeFrom(value);
+                    opticalLinksBuilder_.addMessage(value);
                 }
-                bitField0_ |= 0x00000001;
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder clearFiberUuid() {
-                bitField0_ = (bitField0_ & ~0x00000001);
-                fiberUuid_ = null;
-                if (fiberUuidBuilder_ != null) {
-                    fiberUuidBuilder_.dispose();
-                    fiberUuidBuilder_ = null;
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, value);
                 }
-                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.Uuid.Builder getFiberUuidBuilder() {
-                bitField0_ |= 0x00000001;
-                onChanged();
-                return getFiberUuidFieldBuilder().getBuilder();
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
-                if (fiberUuidBuilder_ != null) {
-                    return fiberUuidBuilder_.getMessageOrBuilder();
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, builderForValue.build());
+                    onChanged();
                 } else {
-                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+                    opticalLinksBuilder_.addMessage(index, builderForValue.build());
                 }
+                return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getFiberUuidFieldBuilder() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
-                    fiberUuid_ = null;
+            public Builder addAllOpticalLinks(java.lang.Iterable<? extends context.ContextOuterClass.OpticalLink> values) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinks_);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addAllMessages(values);
                 }
-                return fiberUuidBuilder_;
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder clearOpticalLinks() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder removeOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.remove(index);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder getOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+                if (opticalLinksBuilder_ != null) {
+                    return opticalLinksBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder() {
+                return getOpticalLinksFieldBuilder().addBuilder(context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink.Builder> getOpticalLinksBuilderList() {
+                return getOpticalLinksFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksFieldBuilder() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder>(opticalLinks_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    opticalLinks_ = null;
+                }
+                return opticalLinksBuilder_;
             }
 
             @java.lang.Override
@@ -72277,24 +76470,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.FiberId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLinkList)
         }
 
-        // @@protoc_insertion_point(class_scope:context.FiberId)
-        private static final context.ContextOuterClass.FiberId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkList)
+        private static final context.ContextOuterClass.OpticalLinkList DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.FiberId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkList();
         }
 
-        public static context.ContextOuterClass.FiberId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLinkList getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<FiberId> PARSER = new com.google.protobuf.AbstractParser<FiberId>() {
+        private static final com.google.protobuf.Parser<OpticalLinkList> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkList>() {
 
             @java.lang.Override
-            public FiberId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalLinkList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -72309,255 +76502,248 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<FiberId> parser() {
+        public static com.google.protobuf.Parser<OpticalLinkList> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<FiberId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLinkList> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLinkList getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface FiberOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Fiber)
+    public interface OpticalLinkDetailsOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkDetails)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string ID = 10;</code>
-         * @return The iD.
-         */
-        java.lang.String getID();
-
-        /**
-         * <code>string ID = 10;</code>
-         * @return The bytes for iD.
+         * <code>float length = 1;</code>
+         * @return The length.
          */
-        com.google.protobuf.ByteString getIDBytes();
+        float getLength();
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The srcPort.
          */
         java.lang.String getSrcPort();
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The bytes for srcPort.
          */
         com.google.protobuf.ByteString getSrcPortBytes();
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The dstPort.
          */
         java.lang.String getDstPort();
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The bytes for dstPort.
          */
         com.google.protobuf.ByteString getDstPortBytes();
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The localPeerPort.
          */
         java.lang.String getLocalPeerPort();
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The bytes for localPeerPort.
          */
         com.google.protobuf.ByteString getLocalPeerPortBytes();
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The remotePeerPort.
          */
         java.lang.String getRemotePeerPort();
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The bytes for remotePeerPort.
          */
         com.google.protobuf.ByteString getRemotePeerPortBytes();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return A list containing the cSlots.
+         * <code>bool used = 6;</code>
+         * @return The used.
          */
-        java.util.List<java.lang.Integer> getCSlotsList();
+        boolean getUsed();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return The count of cSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
         int getCSlotsCount();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @param index The index of the element to return.
-         * @return The cSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        int getCSlots(int index);
+        boolean containsCSlots(java.lang.String key);
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return A list containing the lSlots.
+         * Use {@link #getCSlotsMap()} instead.
          */
-        java.util.List<java.lang.Integer> getLSlotsList();
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getCSlots();
+
+        /**
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap();
+
+        /**
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        int getCSlotsOrDefault(java.lang.String key, int defaultValue);
+
+        /**
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        int getCSlotsOrThrow(java.lang.String key);
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return The count of lSlots.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
         int getLSlotsCount();
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @param index The index of the element to return.
-         * @return The lSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getLSlots(int index);
+        boolean containsLSlots(java.lang.String key);
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return A list containing the sSlots.
+         * Use {@link #getLSlotsMap()} instead.
          */
-        java.util.List<java.lang.Integer> getSSlotsList();
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getLSlots();
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return The count of sSlots.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getSSlotsCount();
+        java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap();
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @param index The index of the element to return.
-         * @return The sSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getSSlots(int index);
+        int getLSlotsOrDefault(java.lang.String key, int defaultValue);
 
         /**
-         * <code>float length = 8;</code>
-         * @return The length.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        float getLength();
+        int getLSlotsOrThrow(java.lang.String key);
 
         /**
-         * <code>bool used = 9;</code>
-         * @return The used.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        boolean getUsed();
+        int getSSlotsCount();
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        boolean hasFiberUuid();
+        boolean containsSSlots(java.lang.String key);
+
+        /**
+         * Use {@link #getSSlotsMap()} instead.
+         */
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getSSlots();
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return The fiberUuid.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        context.ContextOuterClass.FiberId getFiberUuid();
+        java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap();
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder();
+        int getSSlotsOrDefault(java.lang.String key, int defaultValue);
+
+        /**
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
+         */
+        int getSSlotsOrThrow(java.lang.String key);
     }
 
     /**
-     * Protobuf type {@code context.Fiber}
+     * Protobuf type {@code context.OpticalLinkDetails}
      */
-    public static final class Fiber extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Fiber)
-    FiberOrBuilder {
+    public static final class OpticalLinkDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkDetails)
+    OpticalLinkDetailsOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use Fiber.newBuilder() to construct.
-        private Fiber(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLinkDetails.newBuilder() to construct.
+        private OpticalLinkDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private Fiber() {
-            iD_ = "";
+        private OpticalLinkDetails() {
             srcPort_ = "";
             dstPort_ = "";
             localPeerPort_ = "";
             remotePeerPort_ = "";
-            cSlots_ = emptyIntList();
-            lSlots_ = emptyIntList();
-            sSlots_ = emptyIntList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new Fiber();
+            return new OpticalLinkDetails();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
         }
 
+        @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+        protected com.google.protobuf.MapField internalGetMapField(int number) {
+            switch(number) {
+                case 7:
+                    return internalGetCSlots();
+                case 8:
+                    return internalGetLSlots();
+                case 9:
+                    return internalGetSSlots();
+                default:
+                    throw new RuntimeException("Invalid map field number: " + number);
+            }
         }
 
-        public static final int ID_FIELD_NUMBER = 10;
-
-        @SuppressWarnings("serial")
-        private volatile java.lang.Object iD_ = "";
-
-        /**
-         * <code>string ID = 10;</code>
-         * @return The iD.
-         */
         @java.lang.Override
-        public java.lang.String getID() {
-            java.lang.Object ref = iD_;
-            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();
-                iD_ = s;
-                return s;
-            }
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
         }
 
+        public static final int LENGTH_FIELD_NUMBER = 1;
+
+        private float length_ = 0F;
+
         /**
-         * <code>string ID = 10;</code>
-         * @return The bytes for iD.
+         * <code>float length = 1;</code>
+         * @return The length.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getIDBytes() {
-            java.lang.Object ref = iD_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                iD_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public float getLength() {
+            return length_;
         }
 
-        public static final int SRC_PORT_FIELD_NUMBER = 1;
+        public static final int SRC_PORT_FIELD_NUMBER = 2;
 
         @SuppressWarnings("serial")
         private volatile java.lang.Object srcPort_ = "";
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The srcPort.
          */
         @java.lang.Override
@@ -72574,7 +76760,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The bytes for srcPort.
          */
         @java.lang.Override
@@ -72589,13 +76775,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int DST_PORT_FIELD_NUMBER = 2;
+        public static final int DST_PORT_FIELD_NUMBER = 3;
 
         @SuppressWarnings("serial")
         private volatile java.lang.Object dstPort_ = "";
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The dstPort.
          */
         @java.lang.Override
@@ -72612,7 +76798,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The bytes for dstPort.
          */
         @java.lang.Override
@@ -72627,13 +76813,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int LOCAL_PEER_PORT_FIELD_NUMBER = 3;
+        public static final int LOCAL_PEER_PORT_FIELD_NUMBER = 4;
 
         @SuppressWarnings("serial")
         private volatile java.lang.Object localPeerPort_ = "";
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The localPeerPort.
          */
         @java.lang.Override
@@ -72650,7 +76836,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The bytes for localPeerPort.
          */
         @java.lang.Override
@@ -72665,13 +76851,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int REMOTE_PEER_PORT_FIELD_NUMBER = 4;
+        public static final int REMOTE_PEER_PORT_FIELD_NUMBER = 5;
 
         @SuppressWarnings("serial")
         private volatile java.lang.Object remotePeerPort_ = "";
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The remotePeerPort.
          */
         @java.lang.Override
@@ -72688,7 +76874,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The bytes for remotePeerPort.
          */
         @java.lang.Override
@@ -72703,159 +76889,245 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int C_SLOTS_FIELD_NUMBER = 5;
+        public static final int USED_FIELD_NUMBER = 6;
 
-        @SuppressWarnings("serial")
-        private com.google.protobuf.Internal.IntList cSlots_;
+        private boolean used_ = false;
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return A list containing the cSlots.
+         * <code>bool used = 6;</code>
+         * @return The used.
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getCSlotsList() {
+        public boolean getUsed() {
+            return used_;
+        }
+
+        public static final int C_SLOTS_FIELD_NUMBER = 7;
+
+        private static final class CSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
+        }
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> cSlots_;
+
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetCSlots() {
+            if (cSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(CSlotsDefaultEntryHolder.defaultEntry);
+            }
             return cSlots_;
         }
 
-        /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return The count of cSlots.
-         */
         public int getCSlotsCount() {
-            return cSlots_.size();
+            return internalGetCSlots().getMap().size();
         }
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @param index The index of the element to return.
-         * @return The cSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getCSlots(int index) {
-            return cSlots_.getInt(index);
+        @java.lang.Override
+        public boolean containsCSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetCSlots().getMap().containsKey(key);
         }
 
-        private int cSlotsMemoizedSerializedSize = -1;
-
-        public static final int L_SLOTS_FIELD_NUMBER = 6;
-
-        @SuppressWarnings("serial")
-        private com.google.protobuf.Internal.IntList lSlots_;
+        /**
+         * Use {@link #getCSlotsMap()} instead.
+         */
+        @java.lang.Override
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getCSlots() {
+            return getCSlotsMap();
+        }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return A list containing the lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getLSlotsList() {
-            return lSlots_;
+        public java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap() {
+            return internalGetCSlots().getMap();
         }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return The count of lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getLSlotsCount() {
-            return lSlots_.size();
+        @java.lang.Override
+        public int getCSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
         }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @param index The index of the element to return.
-         * @return The lSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getLSlots(int index) {
-            return lSlots_.getInt(index);
+        @java.lang.Override
+        public int getCSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
         }
 
-        private int lSlotsMemoizedSerializedSize = -1;
+        public static final int L_SLOTS_FIELD_NUMBER = 8;
 
-        public static final int S_SLOTS_FIELD_NUMBER = 7;
+        private static final class LSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
+        }
 
         @SuppressWarnings("serial")
-        private com.google.protobuf.Internal.IntList sSlots_;
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> lSlots_;
+
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetLSlots() {
+            if (lSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(LSlotsDefaultEntryHolder.defaultEntry);
+            }
+            return lSlots_;
+        }
+
+        public int getLSlotsCount() {
+            return internalGetLSlots().getMap().size();
+        }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return A list containing the sSlots.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getSSlotsList() {
-            return sSlots_;
+        public boolean containsLSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetLSlots().getMap().containsKey(key);
         }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return The count of sSlots.
+         * Use {@link #getLSlotsMap()} instead.
          */
-        public int getSSlotsCount() {
-            return sSlots_.size();
+        @java.lang.Override
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getLSlots() {
+            return getLSlotsMap();
         }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @param index The index of the element to return.
-         * @return The sSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
+         */
+        @java.lang.Override
+        public java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap() {
+            return internalGetLSlots().getMap();
+        }
+
+        /**
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
+         */
+        @java.lang.Override
+        public int getLSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
+        }
+
+        /**
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        public int getSSlots(int index) {
-            return sSlots_.getInt(index);
+        @java.lang.Override
+        public int getLSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
+        }
+
+        public static final int S_SLOTS_FIELD_NUMBER = 9;
+
+        private static final class SSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
         }
 
-        private int sSlotsMemoizedSerializedSize = -1;
+        @SuppressWarnings("serial")
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> sSlots_;
 
-        public static final int LENGTH_FIELD_NUMBER = 8;
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetSSlots() {
+            if (sSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(SSlotsDefaultEntryHolder.defaultEntry);
+            }
+            return sSlots_;
+        }
 
-        private float length_ = 0F;
+        public int getSSlotsCount() {
+            return internalGetSSlots().getMap().size();
+        }
 
         /**
-         * <code>float length = 8;</code>
-         * @return The length.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public float getLength() {
-            return length_;
+        public boolean containsSSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetSSlots().getMap().containsKey(key);
         }
 
-        public static final int USED_FIELD_NUMBER = 9;
-
-        private boolean used_ = false;
-
         /**
-         * <code>bool used = 9;</code>
-         * @return The used.
+         * Use {@link #getSSlotsMap()} instead.
          */
         @java.lang.Override
-        public boolean getUsed() {
-            return used_;
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getSSlots() {
+            return getSSlotsMap();
         }
 
-        public static final int FIBER_UUID_FIELD_NUMBER = 11;
-
-        private context.ContextOuterClass.FiberId fiberUuid_;
-
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public boolean hasFiberUuid() {
-            return fiberUuid_ != null;
+        public java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap() {
+            return internalGetSSlots().getMap();
         }
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return The fiberUuid.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberId getFiberUuid() {
-            return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+        public int getSSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
         }
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
-            return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+        public int getSSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -72873,52 +77145,27 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            getSerializedSize();
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                output.writeFloat(1, length_);
+            }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcPort_);
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, srcPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstPort_);
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, dstPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, localPeerPort_);
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, localPeerPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, remotePeerPort_);
-            }
-            if (getCSlotsList().size() > 0) {
-                output.writeUInt32NoTag(42);
-                output.writeUInt32NoTag(cSlotsMemoizedSerializedSize);
-            }
-            for (int i = 0; i < cSlots_.size(); i++) {
-                output.writeInt32NoTag(cSlots_.getInt(i));
-            }
-            if (getLSlotsList().size() > 0) {
-                output.writeUInt32NoTag(50);
-                output.writeUInt32NoTag(lSlotsMemoizedSerializedSize);
-            }
-            for (int i = 0; i < lSlots_.size(); i++) {
-                output.writeInt32NoTag(lSlots_.getInt(i));
-            }
-            if (getSSlotsList().size() > 0) {
-                output.writeUInt32NoTag(58);
-                output.writeUInt32NoTag(sSlotsMemoizedSerializedSize);
-            }
-            for (int i = 0; i < sSlots_.size(); i++) {
-                output.writeInt32NoTag(sSlots_.getInt(i));
-            }
-            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
-                output.writeFloat(8, length_);
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 5, remotePeerPort_);
             }
             if (used_ != false) {
-                output.writeBool(9, used_);
-            }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(iD_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 10, iD_);
-            }
-            if (fiberUuid_ != null) {
-                output.writeMessage(11, getFiberUuid());
+                output.writeBool(6, used_);
             }
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetCSlots(), CSlotsDefaultEntryHolder.defaultEntry, 7);
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetLSlots(), LSlotsDefaultEntryHolder.defaultEntry, 8);
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetSSlots(), SSlotsDefaultEntryHolder.defaultEntry, 9);
             getUnknownFields().writeTo(output);
         }
 
@@ -72928,65 +77175,35 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, length_);
+            }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcPort_);
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, srcPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstPort_);
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, dstPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, localPeerPort_);
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, localPeerPort_);
             }
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, remotePeerPort_);
-            }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < cSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(cSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getCSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                cSlotsMemoizedSerializedSize = dataSize;
-            }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < lSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(lSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getLSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                lSlotsMemoizedSerializedSize = dataSize;
-            }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < sSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(sSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getSSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                sSlotsMemoizedSerializedSize = dataSize;
-            }
-            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(8, length_);
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, remotePeerPort_);
             }
             if (used_ != false) {
-                size += com.google.protobuf.CodedOutputStream.computeBoolSize(9, used_);
+                size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, used_);
             }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(iD_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, iD_);
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetCSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> cSlots__ = CSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, cSlots__);
             }
-            if (fiberUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getFiberUuid());
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetLSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> lSlots__ = LSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, lSlots__);
+            }
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetSSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> sSlots__ = SSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, sSlots__);
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -72998,11 +77215,11 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.Fiber)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLinkDetails)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.Fiber other = (context.ContextOuterClass.Fiber) obj;
-            if (!getID().equals(other.getID()))
+            context.ContextOuterClass.OpticalLinkDetails other = (context.ContextOuterClass.OpticalLinkDetails) obj;
+            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
                 return false;
             if (!getSrcPort().equals(other.getSrcPort()))
                 return false;
@@ -73012,22 +77229,14 @@ public final class ContextOuterClass {
                 return false;
             if (!getRemotePeerPort().equals(other.getRemotePeerPort()))
                 return false;
-            if (!getCSlotsList().equals(other.getCSlotsList()))
-                return false;
-            if (!getLSlotsList().equals(other.getLSlotsList()))
-                return false;
-            if (!getSSlotsList().equals(other.getSSlotsList()))
+            if (getUsed() != other.getUsed())
                 return false;
-            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+            if (!internalGetCSlots().equals(other.internalGetCSlots()))
                 return false;
-            if (getUsed() != other.getUsed())
+            if (!internalGetLSlots().equals(other.internalGetLSlots()))
                 return false;
-            if (hasFiberUuid() != other.hasFiberUuid())
+            if (!internalGetSSlots().equals(other.internalGetSSlots()))
                 return false;
-            if (hasFiberUuid()) {
-                if (!getFiberUuid().equals(other.getFiberUuid()))
-                    return false;
-            }
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -73040,8 +77249,8 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + ID_FIELD_NUMBER;
-            hash = (53 * hash) + getID().hashCode();
+            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
             hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
             hash = (53 * hash) + getSrcPort().hashCode();
             hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
@@ -73050,76 +77259,70 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getLocalPeerPort().hashCode();
             hash = (37 * hash) + REMOTE_PEER_PORT_FIELD_NUMBER;
             hash = (53 * hash) + getRemotePeerPort().hashCode();
-            if (getCSlotsCount() > 0) {
+            hash = (37 * hash) + USED_FIELD_NUMBER;
+            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUsed());
+            if (!internalGetCSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + C_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getCSlotsList().hashCode();
+                hash = (53 * hash) + internalGetCSlots().hashCode();
             }
-            if (getLSlotsCount() > 0) {
+            if (!internalGetLSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + L_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getLSlotsList().hashCode();
+                hash = (53 * hash) + internalGetLSlots().hashCode();
             }
-            if (getSSlotsCount() > 0) {
+            if (!internalGetSSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + S_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getSSlotsList().hashCode();
-            }
-            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
-            hash = (37 * hash) + USED_FIELD_NUMBER;
-            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUsed());
-            if (hasFiberUuid()) {
-                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getFiberUuid().hashCode();
+                hash = (53 * hash) + internalGetSSlots().hashCode();
             }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -73132,7 +77335,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.Fiber prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkDetails prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -73148,21 +77351,49 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.Fiber}
+         * Protobuf type {@code context.OpticalLinkDetails}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.Fiber)
-        context.ContextOuterClass.FiberOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkDetails)
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            }
+
+            @SuppressWarnings({ "rawtypes" })
+            protected com.google.protobuf.MapField internalGetMapField(int number) {
+                switch(number) {
+                    case 7:
+                        return internalGetCSlots();
+                    case 8:
+                        return internalGetLSlots();
+                    case 9:
+                        return internalGetSSlots();
+                    default:
+                        throw new RuntimeException("Invalid map field number: " + number);
+                }
+            }
+
+            @SuppressWarnings({ "rawtypes" })
+            protected com.google.protobuf.MapField internalGetMutableMapField(int number) {
+                switch(number) {
+                    case 7:
+                        return internalGetMutableCSlots();
+                    case 8:
+                        return internalGetMutableLSlots();
+                    case 9:
+                        return internalGetMutableSSlots();
+                    default:
+                        throw new RuntimeException("Invalid map field number: " + number);
+                }
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.Fiber.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLinkDetails.newBuilder()
             private Builder() {
             }
 
@@ -73174,37 +77405,31 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                iD_ = "";
+                length_ = 0F;
                 srcPort_ = "";
                 dstPort_ = "";
                 localPeerPort_ = "";
                 remotePeerPort_ = "";
-                cSlots_ = emptyIntList();
-                lSlots_ = emptyIntList();
-                sSlots_ = emptyIntList();
-                length_ = 0F;
                 used_ = false;
-                fiberUuid_ = null;
-                if (fiberUuidBuilder_ != null) {
-                    fiberUuidBuilder_.dispose();
-                    fiberUuidBuilder_ = null;
-                }
+                internalGetMutableCSlots().clear();
+                internalGetMutableLSlots().clear();
+                internalGetMutableSSlots().clear();
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
-                return context.ContextOuterClass.Fiber.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber build() {
-                context.ContextOuterClass.Fiber result = buildPartial();
+            public context.ContextOuterClass.OpticalLinkDetails build() {
+                context.ContextOuterClass.OpticalLinkDetails result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -73212,9 +77437,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber buildPartial() {
-                context.ContextOuterClass.Fiber result = new context.ContextOuterClass.Fiber(this);
-                buildPartialRepeatedFields(result);
+            public context.ContextOuterClass.OpticalLinkDetails buildPartial() {
+                context.ContextOuterClass.OpticalLinkDetails result = new context.ContextOuterClass.OpticalLinkDetails(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -73222,28 +77446,10 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartialRepeatedFields(context.ContextOuterClass.Fiber result) {
-                if (((bitField0_ & 0x00000020) != 0)) {
-                    cSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000020);
-                }
-                result.cSlots_ = cSlots_;
-                if (((bitField0_ & 0x00000040) != 0)) {
-                    lSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000040);
-                }
-                result.lSlots_ = lSlots_;
-                if (((bitField0_ & 0x00000080) != 0)) {
-                    sSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000080);
-                }
-                result.sSlots_ = sSlots_;
-            }
-
-            private void buildPartial0(context.ContextOuterClass.Fiber result) {
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkDetails result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.iD_ = iD_;
+                    result.length_ = length_;
                 }
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.srcPort_ = srcPort_;
@@ -73257,34 +77463,38 @@ public final class ContextOuterClass {
                 if (((from_bitField0_ & 0x00000010) != 0)) {
                     result.remotePeerPort_ = remotePeerPort_;
                 }
-                if (((from_bitField0_ & 0x00000100) != 0)) {
-                    result.length_ = length_;
-                }
-                if (((from_bitField0_ & 0x00000200) != 0)) {
+                if (((from_bitField0_ & 0x00000020) != 0)) {
                     result.used_ = used_;
                 }
-                if (((from_bitField0_ & 0x00000400) != 0)) {
-                    result.fiberUuid_ = fiberUuidBuilder_ == null ? fiberUuid_ : fiberUuidBuilder_.build();
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.cSlots_ = internalGetCSlots();
+                    result.cSlots_.makeImmutable();
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.lSlots_ = internalGetLSlots();
+                    result.lSlots_.makeImmutable();
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.sSlots_ = internalGetSSlots();
+                    result.sSlots_.makeImmutable();
                 }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.Fiber) {
-                    return mergeFrom((context.ContextOuterClass.Fiber) other);
+                if (other instanceof context.ContextOuterClass.OpticalLinkDetails) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkDetails) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.Fiber other) {
-                if (other == context.ContextOuterClass.Fiber.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkDetails other) {
+                if (other == context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance())
                     return this;
-                if (!other.getID().isEmpty()) {
-                    iD_ = other.iD_;
-                    bitField0_ |= 0x00000001;
-                    onChanged();
+                if (other.getLength() != 0F) {
+                    setLength(other.getLength());
                 }
                 if (!other.getSrcPort().isEmpty()) {
                     srcPort_ = other.srcPort_;
@@ -73306,45 +77516,15 @@ public final class ContextOuterClass {
                     bitField0_ |= 0x00000010;
                     onChanged();
                 }
-                if (!other.cSlots_.isEmpty()) {
-                    if (cSlots_.isEmpty()) {
-                        cSlots_ = other.cSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000020);
-                    } else {
-                        ensureCSlotsIsMutable();
-                        cSlots_.addAll(other.cSlots_);
-                    }
-                    onChanged();
-                }
-                if (!other.lSlots_.isEmpty()) {
-                    if (lSlots_.isEmpty()) {
-                        lSlots_ = other.lSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000040);
-                    } else {
-                        ensureLSlotsIsMutable();
-                        lSlots_.addAll(other.lSlots_);
-                    }
-                    onChanged();
-                }
-                if (!other.sSlots_.isEmpty()) {
-                    if (sSlots_.isEmpty()) {
-                        sSlots_ = other.sSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000080);
-                    } else {
-                        ensureSSlotsIsMutable();
-                        sSlots_.addAll(other.sSlots_);
-                    }
-                    onChanged();
-                }
-                if (other.getLength() != 0F) {
-                    setLength(other.getLength());
-                }
                 if (other.getUsed() != false) {
                     setUsed(other.getUsed());
                 }
-                if (other.hasFiberUuid()) {
-                    mergeFiberUuid(other.getFiberUuid());
-                }
+                internalGetMutableCSlots().mergeFrom(other.internalGetCSlots());
+                bitField0_ |= 0x00000040;
+                internalGetMutableLSlots().mergeFrom(other.internalGetLSlots());
+                bitField0_ |= 0x00000080;
+                internalGetMutableSSlots().mergeFrom(other.internalGetSSlots());
+                bitField0_ |= 0x00000100;
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
@@ -73368,122 +77548,72 @@ public final class ContextOuterClass {
                             case 0:
                                 done = true;
                                 break;
-                            case 10:
+                            case 13:
                                 {
-                                    srcPort_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000002;
+                                    length_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
                                     break;
                                 }
-                            // case 10
+                            // case 13
                             case 18:
                                 {
-                                    dstPort_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000004;
+                                    srcPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
                                     break;
                                 }
                             // case 18
                             case 26:
                                 {
-                                    localPeerPort_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000008;
+                                    dstPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
                                     break;
                                 }
                             // case 26
                             case 34:
                                 {
-                                    remotePeerPort_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000010;
+                                    localPeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
                                     break;
                                 }
                             // case 34
-                            case 40:
-                                {
-                                    int v = input.readInt32();
-                                    ensureCSlotsIsMutable();
-                                    cSlots_.addInt(v);
-                                    break;
-                                }
-                            // case 40
                             case 42:
                                 {
-                                    int length = input.readRawVarint32();
-                                    int limit = input.pushLimit(length);
-                                    ensureCSlotsIsMutable();
-                                    while (input.getBytesUntilLimit() > 0) {
-                                        cSlots_.addInt(input.readInt32());
-                                    }
-                                    input.popLimit(limit);
+                                    remotePeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000010;
                                     break;
                                 }
                             // case 42
                             case 48:
                                 {
-                                    int v = input.readInt32();
-                                    ensureLSlotsIsMutable();
-                                    lSlots_.addInt(v);
+                                    used_ = input.readBool();
+                                    bitField0_ |= 0x00000020;
                                     break;
                                 }
                             // case 48
-                            case 50:
-                                {
-                                    int length = input.readRawVarint32();
-                                    int limit = input.pushLimit(length);
-                                    ensureLSlotsIsMutable();
-                                    while (input.getBytesUntilLimit() > 0) {
-                                        lSlots_.addInt(input.readInt32());
-                                    }
-                                    input.popLimit(limit);
-                                    break;
-                                }
-                            // case 50
-                            case 56:
-                                {
-                                    int v = input.readInt32();
-                                    ensureSSlotsIsMutable();
-                                    sSlots_.addInt(v);
-                                    break;
-                                }
-                            // case 56
                             case 58:
                                 {
-                                    int length = input.readRawVarint32();
-                                    int limit = input.pushLimit(length);
-                                    ensureSSlotsIsMutable();
-                                    while (input.getBytesUntilLimit() > 0) {
-                                        sSlots_.addInt(input.readInt32());
-                                    }
-                                    input.popLimit(limit);
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> cSlots__ = input.readMessage(CSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableCSlots().getMutableMap().put(cSlots__.getKey(), cSlots__.getValue());
+                                    bitField0_ |= 0x00000040;
                                     break;
                                 }
                             // case 58
-                            case 69:
-                                {
-                                    length_ = input.readFloat();
-                                    bitField0_ |= 0x00000100;
-                                    break;
-                                }
-                            // case 69
-                            case 72:
-                                {
-                                    used_ = input.readBool();
-                                    bitField0_ |= 0x00000200;
-                                    break;
-                                }
-                            // case 72
-                            case 82:
+                            case 66:
                                 {
-                                    iD_ = input.readStringRequireUtf8();
-                                    bitField0_ |= 0x00000001;
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> lSlots__ = input.readMessage(LSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableLSlots().getMutableMap().put(lSlots__.getKey(), lSlots__.getValue());
+                                    bitField0_ |= 0x00000080;
                                     break;
                                 }
-                            // case 82
-                            case 90:
+                            // case 66
+                            case 74:
                                 {
-                                    input.readMessage(getFiberUuidFieldBuilder().getBuilder(), extensionRegistry);
-                                    bitField0_ |= 0x00000400;
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> sSlots__ = input.readMessage(SSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableSSlots().getMutableMap().put(sSlots__.getKey(), sSlots__.getValue());
+                                    bitField0_ |= 0x00000100;
                                     break;
                                 }
-                            // case 90
+                            // case 74
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -73507,77 +77637,36 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private java.lang.Object iD_ = "";
-
-            /**
-             * <code>string ID = 10;</code>
-             * @return The iD.
-             */
-            public java.lang.String getID() {
-                java.lang.Object ref = iD_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    iD_ = s;
-                    return s;
-                } else {
-                    return (java.lang.String) ref;
-                }
-            }
+            private float length_;
 
             /**
-             * <code>string ID = 10;</code>
-             * @return The bytes for iD.
+             * <code>float length = 1;</code>
+             * @return The length.
              */
-            public com.google.protobuf.ByteString getIDBytes() {
-                java.lang.Object ref = iD_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    iD_ = b;
-                    return b;
-                } else {
-                    return (com.google.protobuf.ByteString) ref;
-                }
+            @java.lang.Override
+            public float getLength() {
+                return length_;
             }
 
             /**
-             * <code>string ID = 10;</code>
-             * @param value The iD to set.
+             * <code>float length = 1;</code>
+             * @param value The length to set.
              * @return This builder for chaining.
              */
-            public Builder setID(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                iD_ = value;
+            public Builder setLength(float value) {
+                length_ = value;
                 bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string ID = 10;</code>
+             * <code>float length = 1;</code>
              * @return This builder for chaining.
              */
-            public Builder clearID() {
-                iD_ = getDefaultInstance().getID();
+            public Builder clearLength() {
                 bitField0_ = (bitField0_ & ~0x00000001);
-                onChanged();
-                return this;
-            }
-
-            /**
-             * <code>string ID = 10;</code>
-             * @param value The bytes for iD to set.
-             * @return This builder for chaining.
-             */
-            public Builder setIDBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                checkByteStringIsUtf8(value);
-                iD_ = value;
-                bitField0_ |= 0x00000001;
+                length_ = 0F;
                 onChanged();
                 return this;
             }
@@ -73585,7 +77674,7 @@ public final class ContextOuterClass {
             private java.lang.Object srcPort_ = "";
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return The srcPort.
              */
             public java.lang.String getSrcPort() {
@@ -73601,7 +77690,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return The bytes for srcPort.
              */
             public com.google.protobuf.ByteString getSrcPortBytes() {
@@ -73616,7 +77705,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @param value The srcPort to set.
              * @return This builder for chaining.
              */
@@ -73631,7 +77720,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return This builder for chaining.
              */
             public Builder clearSrcPort() {
@@ -73642,7 +77731,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @param value The bytes for srcPort to set.
              * @return This builder for chaining.
              */
@@ -73660,7 +77749,7 @@ public final class ContextOuterClass {
             private java.lang.Object dstPort_ = "";
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return The dstPort.
              */
             public java.lang.String getDstPort() {
@@ -73676,7 +77765,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return The bytes for dstPort.
              */
             public com.google.protobuf.ByteString getDstPortBytes() {
@@ -73691,7 +77780,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @param value The dstPort to set.
              * @return This builder for chaining.
              */
@@ -73706,7 +77795,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return This builder for chaining.
              */
             public Builder clearDstPort() {
@@ -73717,7 +77806,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @param value The bytes for dstPort to set.
              * @return This builder for chaining.
              */
@@ -73735,7 +77824,7 @@ public final class ContextOuterClass {
             private java.lang.Object localPeerPort_ = "";
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return The localPeerPort.
              */
             public java.lang.String getLocalPeerPort() {
@@ -73751,7 +77840,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return The bytes for localPeerPort.
              */
             public com.google.protobuf.ByteString getLocalPeerPortBytes() {
@@ -73766,7 +77855,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @param value The localPeerPort to set.
              * @return This builder for chaining.
              */
@@ -73781,7 +77870,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return This builder for chaining.
              */
             public Builder clearLocalPeerPort() {
@@ -73792,7 +77881,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @param value The bytes for localPeerPort to set.
              * @return This builder for chaining.
              */
@@ -73810,7 +77899,7 @@ public final class ContextOuterClass {
             private java.lang.Object remotePeerPort_ = "";
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return The remotePeerPort.
              */
             public java.lang.String getRemotePeerPort() {
@@ -73826,7 +77915,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return The bytes for remotePeerPort.
              */
             public com.google.protobuf.ByteString getRemotePeerPortBytes() {
@@ -73841,7 +77930,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @param value The remotePeerPort to set.
              * @return This builder for chaining.
              */
@@ -73856,7 +77945,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return This builder for chaining.
              */
             public Builder clearRemotePeerPort() {
@@ -73867,7 +77956,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @param value The bytes for remotePeerPort to set.
              * @return This builder for chaining.
              */
@@ -73882,436 +77971,419 @@ public final class ContextOuterClass {
                 return this;
             }
 
-            private com.google.protobuf.Internal.IntList cSlots_ = emptyIntList();
-
-            private void ensureCSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000020) != 0)) {
-                    cSlots_ = mutableCopy(cSlots_);
-                    bitField0_ |= 0x00000020;
-                }
-            }
-
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return A list containing the cSlots.
-             */
-            public java.util.List<java.lang.Integer> getCSlotsList() {
-                return ((bitField0_ & 0x00000020) != 0) ? java.util.Collections.unmodifiableList(cSlots_) : cSlots_;
-            }
-
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return The count of cSlots.
-             */
-            public int getCSlotsCount() {
-                return cSlots_.size();
-            }
+            private boolean used_;
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param index The index of the element to return.
-             * @return The cSlots at the given index.
+             * <code>bool used = 6;</code>
+             * @return The used.
              */
-            public int getCSlots(int index) {
-                return cSlots_.getInt(index);
+            @java.lang.Override
+            public boolean getUsed() {
+                return used_;
             }
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param index The index to set the value at.
-             * @param value The cSlots to set.
+             * <code>bool used = 6;</code>
+             * @param value The used to set.
              * @return This builder for chaining.
              */
-            public Builder setCSlots(int index, int value) {
-                ensureCSlotsIsMutable();
-                cSlots_.setInt(index, value);
+            public Builder setUsed(boolean value) {
+                used_ = value;
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param value The cSlots to add.
+             * <code>bool used = 6;</code>
              * @return This builder for chaining.
              */
-            public Builder addCSlots(int value) {
-                ensureCSlotsIsMutable();
-                cSlots_.addInt(value);
+            public Builder clearUsed() {
+                bitField0_ = (bitField0_ & ~0x00000020);
+                used_ = false;
                 onChanged();
                 return this;
             }
 
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param values The cSlots to add.
-             * @return This builder for chaining.
-             */
-            public Builder addAllCSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureCSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, cSlots_);
-                onChanged();
-                return this;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> cSlots_;
+
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetCSlots() {
+                if (cSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(CSlotsDefaultEntryHolder.defaultEntry);
+                }
+                return cSlots_;
             }
 
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearCSlots() {
-                cSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000020);
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableCSlots() {
+                if (cSlots_ == null) {
+                    cSlots_ = com.google.protobuf.MapField.newMapField(CSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!cSlots_.isMutable()) {
+                    cSlots_ = cSlots_.copy();
+                }
+                bitField0_ |= 0x00000040;
                 onChanged();
-                return this;
+                return cSlots_;
             }
 
-            private com.google.protobuf.Internal.IntList lSlots_ = emptyIntList();
+            public int getCSlotsCount() {
+                return internalGetCSlots().getMap().size();
+            }
 
-            private void ensureLSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000040) != 0)) {
-                    lSlots_ = mutableCopy(lSlots_);
-                    bitField0_ |= 0x00000040;
+            /**
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+             */
+            @java.lang.Override
+            public boolean containsCSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
+                return internalGetCSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return A list containing the lSlots.
+             * Use {@link #getCSlotsMap()} instead.
              */
-            public java.util.List<java.lang.Integer> getLSlotsList() {
-                return ((bitField0_ & 0x00000040) != 0) ? java.util.Collections.unmodifiableList(lSlots_) : lSlots_;
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getCSlots() {
+                return getCSlotsMap();
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return The count of lSlots.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public int getLSlotsCount() {
-                return lSlots_.size();
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap() {
+                return internalGetCSlots().getMap();
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param index The index of the element to return.
-             * @return The lSlots at the given index.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public int getLSlots(int index) {
-                return lSlots_.getInt(index);
+            @java.lang.Override
+            public int getCSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param index The index to set the value at.
-             * @param value The lSlots to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder setLSlots(int index, int value) {
-                ensureLSlotsIsMutable();
-                lSlots_.setInt(index, value);
-                onChanged();
+            @java.lang.Override
+            public int getCSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
+                }
+                return map.get(key);
+            }
+
+            public Builder clearCSlots() {
+                bitField0_ = (bitField0_ & ~0x00000040);
+                internalGetMutableCSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param value The lSlots to add.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder addLSlots(int value) {
-                ensureLSlotsIsMutable();
-                lSlots_.addInt(value);
-                onChanged();
+            public Builder removeCSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableCSlots().getMutableMap().remove(key);
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param values The lSlots to add.
-             * @return This builder for chaining.
+             * Use alternate mutation accessors instead.
              */
-            public Builder addAllLSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureLSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, lSlots_);
-                onChanged();
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableCSlots() {
+                bitField0_ |= 0x00000040;
+                return internalGetMutableCSlots().getMutableMap();
+            }
+
+            /**
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+             */
+            public Builder putCSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableCSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000040;
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder clearLSlots() {
-                lSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000040);
-                onChanged();
+            public Builder putAllCSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableCSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000040;
                 return this;
             }
 
-            private com.google.protobuf.Internal.IntList sSlots_ = emptyIntList();
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> lSlots_;
 
-            private void ensureSSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000080) != 0)) {
-                    sSlots_ = mutableCopy(sSlots_);
-                    bitField0_ |= 0x00000080;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetLSlots() {
+                if (lSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(LSlotsDefaultEntryHolder.defaultEntry);
                 }
+                return lSlots_;
             }
 
-            /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return A list containing the sSlots.
-             */
-            public java.util.List<java.lang.Integer> getSSlotsList() {
-                return ((bitField0_ & 0x00000080) != 0) ? java.util.Collections.unmodifiableList(sSlots_) : sSlots_;
-            }
-
-            /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return The count of sSlots.
-             */
-            public int getSSlotsCount() {
-                return sSlots_.size();
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableLSlots() {
+                if (lSlots_ == null) {
+                    lSlots_ = com.google.protobuf.MapField.newMapField(LSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!lSlots_.isMutable()) {
+                    lSlots_ = lSlots_.copy();
+                }
+                bitField0_ |= 0x00000080;
+                onChanged();
+                return lSlots_;
             }
 
-            /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param index The index of the element to return.
-             * @return The sSlots at the given index.
-             */
-            public int getSSlots(int index) {
-                return sSlots_.getInt(index);
+            public int getLSlotsCount() {
+                return internalGetLSlots().getMap().size();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param index The index to set the value at.
-             * @param value The sSlots to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder setSSlots(int index, int value) {
-                ensureSSlotsIsMutable();
-                sSlots_.setInt(index, value);
-                onChanged();
-                return this;
+            @java.lang.Override
+            public boolean containsLSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                return internalGetLSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param value The sSlots to add.
-             * @return This builder for chaining.
+             * Use {@link #getLSlotsMap()} instead.
              */
-            public Builder addSSlots(int value) {
-                ensureSSlotsIsMutable();
-                sSlots_.addInt(value);
-                onChanged();
-                return this;
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getLSlots() {
+                return getLSlotsMap();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param values The sSlots to add.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder addAllSSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureSSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, sSlots_);
-                onChanged();
-                return this;
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap() {
+                return internalGetLSlots().getMap();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder clearSSlots() {
-                sSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000080);
-                onChanged();
-                return this;
+            @java.lang.Override
+            public int getLSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
-            private float length_;
-
             /**
-             * <code>float length = 8;</code>
-             * @return The length.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
             @java.lang.Override
-            public float getLength() {
-                return length_;
+            public int getLSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
+                }
+                return map.get(key);
             }
 
-            /**
-             * <code>float length = 8;</code>
-             * @param value The length to set.
-             * @return This builder for chaining.
-             */
-            public Builder setLength(float value) {
-                length_ = value;
-                bitField0_ |= 0x00000100;
-                onChanged();
+            public Builder clearLSlots() {
+                bitField0_ = (bitField0_ & ~0x00000080);
+                internalGetMutableLSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>float length = 8;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder clearLength() {
-                bitField0_ = (bitField0_ & ~0x00000100);
-                length_ = 0F;
-                onChanged();
+            public Builder removeLSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableLSlots().getMutableMap().remove(key);
                 return this;
             }
 
-            private boolean used_;
-
             /**
-             * <code>bool used = 9;</code>
-             * @return The used.
+             * Use alternate mutation accessors instead.
              */
-            @java.lang.Override
-            public boolean getUsed() {
-                return used_;
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableLSlots() {
+                bitField0_ |= 0x00000080;
+                return internalGetMutableLSlots().getMutableMap();
             }
 
             /**
-             * <code>bool used = 9;</code>
-             * @param value The used to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder setUsed(boolean value) {
-                used_ = value;
-                bitField0_ |= 0x00000200;
-                onChanged();
+            public Builder putLSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableLSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000080;
                 return this;
             }
 
             /**
-             * <code>bool used = 9;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder clearUsed() {
-                bitField0_ = (bitField0_ & ~0x00000200);
-                used_ = false;
-                onChanged();
+            public Builder putAllLSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableLSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000080;
                 return this;
             }
 
-            private context.ContextOuterClass.FiberId fiberUuid_;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> sSlots_;
+
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetSSlots() {
+                if (sSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(SSlotsDefaultEntryHolder.defaultEntry);
+                }
+                return sSlots_;
+            }
+
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableSSlots() {
+                if (sSlots_ == null) {
+                    sSlots_ = com.google.protobuf.MapField.newMapField(SSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!sSlots_.isMutable()) {
+                    sSlots_ = sSlots_.copy();
+                }
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return sSlots_;
+            }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> fiberUuidBuilder_;
+            public int getSSlotsCount() {
+                return internalGetSSlots().getMap().size();
+            }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
-             * @return Whether the fiberUuid field is set.
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public boolean hasFiberUuid() {
-                return ((bitField0_ & 0x00000400) != 0);
+            @java.lang.Override
+            public boolean containsSSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                return internalGetSSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
-             * @return The fiberUuid.
+             * Use {@link #getSSlotsMap()} instead.
              */
-            public context.ContextOuterClass.FiberId getFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
-                } else {
-                    return fiberUuidBuilder_.getMessage();
-                }
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getSSlots() {
+                return getSSlotsMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.FiberId value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    fiberUuid_ = value;
-                } else {
-                    fiberUuidBuilder_.setMessage(value);
-                }
-                bitField0_ |= 0x00000400;
-                onChanged();
-                return this;
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap() {
+                return internalGetSSlots().getMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.FiberId.Builder builderForValue) {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = builderForValue.build();
-                } else {
-                    fiberUuidBuilder_.setMessage(builderForValue.build());
+            @java.lang.Override
+            public int getSSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
-                bitField0_ |= 0x00000400;
-                onChanged();
-                return this;
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder mergeFiberUuid(context.ContextOuterClass.FiberId value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (((bitField0_ & 0x00000400) != 0) && fiberUuid_ != null && fiberUuid_ != context.ContextOuterClass.FiberId.getDefaultInstance()) {
-                        getFiberUuidBuilder().mergeFrom(value);
-                    } else {
-                        fiberUuid_ = value;
-                    }
-                } else {
-                    fiberUuidBuilder_.mergeFrom(value);
+            @java.lang.Override
+            public int getSSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
-                bitField0_ |= 0x00000400;
-                onChanged();
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
+                }
+                return map.get(key);
+            }
+
+            public Builder clearSSlots() {
+                bitField0_ = (bitField0_ & ~0x00000100);
+                internalGetMutableSSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder clearFiberUuid() {
-                bitField0_ = (bitField0_ & ~0x00000400);
-                fiberUuid_ = null;
-                if (fiberUuidBuilder_ != null) {
-                    fiberUuidBuilder_.dispose();
-                    fiberUuidBuilder_ = null;
+            public Builder removeSSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
-                onChanged();
+                internalGetMutableSSlots().getMutableMap().remove(key);
                 return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * Use alternate mutation accessors instead.
              */
-            public context.ContextOuterClass.FiberId.Builder getFiberUuidBuilder() {
-                bitField0_ |= 0x00000400;
-                onChanged();
-                return getFiberUuidFieldBuilder().getBuilder();
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableSSlots() {
+                bitField0_ |= 0x00000100;
+                return internalGetMutableSSlots().getMutableMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
-                if (fiberUuidBuilder_ != null) {
-                    return fiberUuidBuilder_.getMessageOrBuilder();
-                } else {
-                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+            public Builder putSSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
+                internalGetMutableSSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000100;
+                return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> getFiberUuidFieldBuilder() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
-                    fiberUuid_ = null;
-                }
-                return fiberUuidBuilder_;
+            public Builder putAllSSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableSSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000100;
+                return this;
             }
 
             @java.lang.Override
@@ -74323,24 +78395,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.Fiber)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLinkDetails)
         }
 
-        // @@protoc_insertion_point(class_scope:context.Fiber)
-        private static final context.ContextOuterClass.Fiber DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkDetails)
+        private static final context.ContextOuterClass.OpticalLinkDetails DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.Fiber();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkDetails();
         }
 
-        public static context.ContextOuterClass.Fiber getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLinkDetails getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<Fiber> PARSER = new com.google.protobuf.AbstractParser<Fiber>() {
+        private static final com.google.protobuf.Parser<OpticalLinkDetails> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkDetails>() {
 
             @java.lang.Override
-            public Fiber parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalLinkDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -74355,246 +78427,270 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<Fiber> parser() {
+        public static com.google.protobuf.Parser<OpticalLinkDetails> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<Fiber> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLinkDetails> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkDetailsOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkDetails)
+    public interface OpticalLinkOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLink)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>float length = 1;</code>
-         * @return The length.
+         * <code>string name = 1;</code>
+         * @return The name.
          */
-        float getLength();
+        java.lang.String getName();
 
         /**
-         * <code>string source = 2;</code>
-         * @return The source.
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
+         */
+        com.google.protobuf.ByteString getNameBytes();
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return Whether the opticalDetails field is set.
+         */
+        boolean hasOpticalDetails();
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return The opticalDetails.
+         */
+        context.ContextOuterClass.OpticalLinkDetails getOpticalDetails();
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
          */
-        java.lang.String getSource();
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder();
 
         /**
-         * <code>string source = 2;</code>
-         * @return The bytes for source.
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return Whether the linkId field is set.
          */
-        com.google.protobuf.ByteString getSourceBytes();
+        boolean hasLinkId();
 
         /**
-         * <code>string target = 3;</code>
-         * @return The target.
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return The linkId.
          */
-        java.lang.String getTarget();
+        context.ContextOuterClass.LinkId getLinkId();
 
         /**
-         * <code>string target = 3;</code>
-         * @return The bytes for target.
+         * <code>.context.LinkId link_id = 3;</code>
          */
-        com.google.protobuf.ByteString getTargetBytes();
+        context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        java.util.List<context.ContextOuterClass.Fiber> getFibersList();
+        java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        context.ContextOuterClass.Fiber getFibers(int index);
+        context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        int getFibersCount();
+        int getLinkEndpointIdsCount();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList();
+        java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index);
+        context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.OpticalLinkDetails}
+     * Protobuf type {@code context.OpticalLink}
      */
-    public static final class OpticalLinkDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkDetails)
-    OpticalLinkDetailsOrBuilder {
+    public static final class OpticalLink extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLink)
+    OpticalLinkOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLinkDetails.newBuilder() to construct.
-        private OpticalLinkDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLink.newBuilder() to construct.
+        private OpticalLink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLinkDetails() {
-            source_ = "";
-            target_ = "";
-            fibers_ = java.util.Collections.emptyList();
+        private OpticalLink() {
+            name_ = "";
+            linkEndpointIds_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLinkDetails();
+            return new OpticalLink();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
-        }
-
-        public static final int LENGTH_FIELD_NUMBER = 1;
-
-        private float length_ = 0F;
-
-        /**
-         * <code>float length = 1;</code>
-         * @return The length.
-         */
-        @java.lang.Override
-        public float getLength() {
-            return length_;
+            return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
         }
 
-        public static final int SOURCE_FIELD_NUMBER = 2;
+        public static final int NAME_FIELD_NUMBER = 1;
 
         @SuppressWarnings("serial")
-        private volatile java.lang.Object source_ = "";
+        private volatile java.lang.Object name_ = "";
 
         /**
-         * <code>string source = 2;</code>
-         * @return The source.
+         * <code>string name = 1;</code>
+         * @return The name.
          */
         @java.lang.Override
-        public java.lang.String getSource() {
-            java.lang.Object ref = source_;
+        public java.lang.String getName() {
+            java.lang.Object ref = name_;
             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();
-                source_ = s;
+                name_ = s;
                 return s;
             }
         }
 
         /**
-         * <code>string source = 2;</code>
-         * @return The bytes for source.
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getSourceBytes() {
-            java.lang.Object ref = source_;
+        public com.google.protobuf.ByteString getNameBytes() {
+            java.lang.Object ref = name_;
             if (ref instanceof java.lang.String) {
                 com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                source_ = b;
+                name_ = b;
                 return b;
             } else {
                 return (com.google.protobuf.ByteString) ref;
             }
         }
 
-        public static final int TARGET_FIELD_NUMBER = 3;
+        public static final int OPTICAL_DETAILS_FIELD_NUMBER = 2;
 
-        @SuppressWarnings("serial")
-        private volatile java.lang.Object target_ = "";
+        private context.ContextOuterClass.OpticalLinkDetails opticalDetails_;
 
         /**
-         * <code>string target = 3;</code>
-         * @return The target.
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return Whether the opticalDetails field is set.
          */
         @java.lang.Override
-        public java.lang.String getTarget() {
-            java.lang.Object ref = target_;
-            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();
-                target_ = s;
-                return s;
-            }
+        public boolean hasOpticalDetails() {
+            return opticalDetails_ != null;
         }
 
         /**
-         * <code>string target = 3;</code>
-         * @return The bytes for target.
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return The opticalDetails.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getTargetBytes() {
-            java.lang.Object ref = target_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                target_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public context.ContextOuterClass.OpticalLinkDetails getOpticalDetails() {
+            return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
+        }
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder() {
+            return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
+        }
+
+        public static final int LINK_ID_FIELD_NUMBER = 3;
+
+        private context.ContextOuterClass.LinkId linkId_;
+
+        /**
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return Whether the linkId field is set.
+         */
+        @java.lang.Override
+        public boolean hasLinkId() {
+            return linkId_ != null;
+        }
+
+        /**
+         * <code>.context.LinkId link_id = 3;</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 = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
 
-        public static final int FIBERS_FIELD_NUMBER = 4;
+        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 4;
 
         @SuppressWarnings("serial")
-        private java.util.List<context.ContextOuterClass.Fiber> fibers_;
+        private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
-            return fibers_;
+        public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+            return linkEndpointIds_;
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
-            return fibers_;
+        public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
+            return linkEndpointIds_;
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public int getFibersCount() {
-            return fibers_.size();
+        public int getLinkEndpointIdsCount() {
+            return linkEndpointIds_.size();
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.Fiber getFibers(int index) {
-            return fibers_.get(index);
+        public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+            return linkEndpointIds_.get(index);
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
-            return fibers_.get(index);
+        public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
+            return linkEndpointIds_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -74612,17 +78708,17 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
-                output.writeFloat(1, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
             }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(source_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, source_);
+            if (opticalDetails_ != null) {
+                output.writeMessage(2, getOpticalDetails());
             }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(target_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, target_);
+            if (linkId_ != null) {
+                output.writeMessage(3, getLinkId());
             }
-            for (int i = 0; i < fibers_.size(); i++) {
-                output.writeMessage(4, fibers_.get(i));
+            for (int i = 0; i < linkEndpointIds_.size(); i++) {
+                output.writeMessage(4, linkEndpointIds_.get(i));
             }
             getUnknownFields().writeTo(output);
         }
@@ -74633,17 +78729,17 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
             }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(source_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, source_);
+            if (opticalDetails_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOpticalDetails());
             }
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(target_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, target_);
+            if (linkId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getLinkId());
             }
-            for (int i = 0; i < fibers_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, fibers_.get(i));
+            for (int i = 0; i < linkEndpointIds_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkEndpointIds_.get(i));
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -74655,17 +78751,25 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLinkDetails)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLink)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLinkDetails other = (context.ContextOuterClass.OpticalLinkDetails) obj;
-            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+            context.ContextOuterClass.OpticalLink other = (context.ContextOuterClass.OpticalLink) obj;
+            if (!getName().equals(other.getName()))
                 return false;
-            if (!getSource().equals(other.getSource()))
+            if (hasOpticalDetails() != other.hasOpticalDetails())
                 return false;
-            if (!getTarget().equals(other.getTarget()))
+            if (hasOpticalDetails()) {
+                if (!getOpticalDetails().equals(other.getOpticalDetails()))
+                    return false;
+            }
+            if (hasLinkId() != other.hasLinkId())
                 return false;
-            if (!getFibersList().equals(other.getFibersList()))
+            if (hasLinkId()) {
+                if (!getLinkId().equals(other.getLinkId()))
+                    return false;
+            }
+            if (!getLinkEndpointIdsList().equals(other.getLinkEndpointIdsList()))
                 return false;
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
@@ -74679,66 +78783,70 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
-            hash = (37 * hash) + SOURCE_FIELD_NUMBER;
-            hash = (53 * hash) + getSource().hashCode();
-            hash = (37 * hash) + TARGET_FIELD_NUMBER;
-            hash = (53 * hash) + getTarget().hashCode();
-            if (getFibersCount() > 0) {
-                hash = (37 * hash) + FIBERS_FIELD_NUMBER;
-                hash = (53 * hash) + getFibersList().hashCode();
+            hash = (37 * hash) + NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getName().hashCode();
+            if (hasOpticalDetails()) {
+                hash = (37 * hash) + OPTICAL_DETAILS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalDetails().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) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -74751,7 +78859,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkDetails prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLink prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -74767,21 +78875,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLinkDetails}
+         * Protobuf type {@code context.OpticalLink}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkDetails)
-        context.ContextOuterClass.OpticalLinkDetailsOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLink)
+        context.ContextOuterClass.OpticalLinkOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLinkDetails.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLink.newBuilder()
             private Builder() {
             }
 
@@ -74793,14 +78901,22 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                length_ = 0F;
-                source_ = "";
-                target_ = "";
-                if (fibersBuilder_ == null) {
-                    fibers_ = java.util.Collections.emptyList();
+                name_ = "";
+                opticalDetails_ = null;
+                if (opticalDetailsBuilder_ != null) {
+                    opticalDetailsBuilder_.dispose();
+                    opticalDetailsBuilder_ = null;
+                }
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
+                    linkIdBuilder_ = null;
+                }
+                if (linkEndpointIdsBuilder_ == null) {
+                    linkEndpointIds_ = java.util.Collections.emptyList();
                 } else {
-                    fibers_ = null;
-                    fibersBuilder_.clear();
+                    linkEndpointIds_ = null;
+                    linkEndpointIdsBuilder_.clear();
                 }
                 bitField0_ = (bitField0_ & ~0x00000008);
                 return this;
@@ -74808,17 +78924,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLink.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails build() {
-                context.ContextOuterClass.OpticalLinkDetails result = buildPartial();
+            public context.ContextOuterClass.OpticalLink build() {
+                context.ContextOuterClass.OpticalLink result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -74826,8 +78942,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails buildPartial() {
-                context.ContextOuterClass.OpticalLinkDetails result = new context.ContextOuterClass.OpticalLinkDetails(this);
+            public context.ContextOuterClass.OpticalLink buildPartial() {
+                context.ContextOuterClass.OpticalLink result = new context.ContextOuterClass.OpticalLink(this);
                 buildPartialRepeatedFields(result);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
@@ -74836,78 +78952,76 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLinkDetails result) {
-                if (fibersBuilder_ == null) {
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLink result) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000008) != 0)) {
-                        fibers_ = java.util.Collections.unmodifiableList(fibers_);
+                        linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
                         bitField0_ = (bitField0_ & ~0x00000008);
                     }
-                    result.fibers_ = fibers_;
+                    result.linkEndpointIds_ = linkEndpointIds_;
                 } else {
-                    result.fibers_ = fibersBuilder_.build();
+                    result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
                 }
             }
 
-            private void buildPartial0(context.ContextOuterClass.OpticalLinkDetails result) {
+            private void buildPartial0(context.ContextOuterClass.OpticalLink result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.length_ = length_;
+                    result.name_ = name_;
                 }
                 if (((from_bitField0_ & 0x00000002) != 0)) {
-                    result.source_ = source_;
+                    result.opticalDetails_ = opticalDetailsBuilder_ == null ? opticalDetails_ : opticalDetailsBuilder_.build();
                 }
                 if (((from_bitField0_ & 0x00000004) != 0)) {
-                    result.target_ = target_;
+                    result.linkId_ = linkIdBuilder_ == null ? linkId_ : linkIdBuilder_.build();
                 }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLinkDetails) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLinkDetails) other);
+                if (other instanceof context.ContextOuterClass.OpticalLink) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLink) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkDetails other) {
-                if (other == context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLink other) {
+                if (other == context.ContextOuterClass.OpticalLink.getDefaultInstance())
                     return this;
-                if (other.getLength() != 0F) {
-                    setLength(other.getLength());
-                }
-                if (!other.getSource().isEmpty()) {
-                    source_ = other.source_;
-                    bitField0_ |= 0x00000002;
+                if (!other.getName().isEmpty()) {
+                    name_ = other.name_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
-                if (!other.getTarget().isEmpty()) {
-                    target_ = other.target_;
-                    bitField0_ |= 0x00000004;
-                    onChanged();
+                if (other.hasOpticalDetails()) {
+                    mergeOpticalDetails(other.getOpticalDetails());
+                }
+                if (other.hasLinkId()) {
+                    mergeLinkId(other.getLinkId());
                 }
-                if (fibersBuilder_ == null) {
-                    if (!other.fibers_.isEmpty()) {
-                        if (fibers_.isEmpty()) {
-                            fibers_ = other.fibers_;
+                if (linkEndpointIdsBuilder_ == null) {
+                    if (!other.linkEndpointIds_.isEmpty()) {
+                        if (linkEndpointIds_.isEmpty()) {
+                            linkEndpointIds_ = other.linkEndpointIds_;
                             bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
-                            ensureFibersIsMutable();
-                            fibers_.addAll(other.fibers_);
+                            ensureLinkEndpointIdsIsMutable();
+                            linkEndpointIds_.addAll(other.linkEndpointIds_);
                         }
                         onChanged();
                     }
                 } else {
-                    if (!other.fibers_.isEmpty()) {
-                        if (fibersBuilder_.isEmpty()) {
-                            fibersBuilder_.dispose();
-                            fibersBuilder_ = null;
-                            fibers_ = other.fibers_;
+                    if (!other.linkEndpointIds_.isEmpty()) {
+                        if (linkEndpointIdsBuilder_.isEmpty()) {
+                            linkEndpointIdsBuilder_.dispose();
+                            linkEndpointIdsBuilder_ = null;
+                            linkEndpointIds_ = other.linkEndpointIds_;
                             bitField0_ = (bitField0_ & ~0x00000008);
-                            fibersBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getFibersFieldBuilder() : null;
+                            linkEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkEndpointIdsFieldBuilder() : null;
                         } else {
-                            fibersBuilder_.addAllMessages(other.fibers_);
+                            linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
                         }
                     }
                 }
@@ -74934,35 +79048,35 @@ public final class ContextOuterClass {
                             case 0:
                                 done = true;
                                 break;
-                            case 13:
+                            case 10:
                                 {
-                                    length_ = input.readFloat();
+                                    name_ = input.readStringRequireUtf8();
                                     bitField0_ |= 0x00000001;
                                     break;
                                 }
-                            // case 13
+                            // case 10
                             case 18:
                                 {
-                                    source_ = input.readStringRequireUtf8();
+                                    input.readMessage(getOpticalDetailsFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000002;
                                     break;
                                 }
                             // case 18
                             case 26:
                                 {
-                                    target_ = input.readStringRequireUtf8();
+                                    input.readMessage(getLinkIdFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000004;
                                     break;
                                 }
                             // case 26
                             case 34:
                                 {
-                                    context.ContextOuterClass.Fiber m = input.readMessage(context.ContextOuterClass.Fiber.parser(), extensionRegistry);
-                                    if (fibersBuilder_ == null) {
-                                        ensureFibersIsMutable();
-                                        fibers_.add(m);
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (linkEndpointIdsBuilder_ == null) {
+                                        ensureLinkEndpointIdsIsMutable();
+                                        linkEndpointIds_.add(m);
                                     } else {
-                                        fibersBuilder_.addMessage(m);
+                                        linkEndpointIdsBuilder_.addMessage(m);
                                     }
                                     break;
                                 }
@@ -74990,425 +79104,552 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private float length_;
+            private java.lang.Object name_ = "";
 
             /**
-             * <code>float length = 1;</code>
-             * @return The length.
+             * <code>string name = 1;</code>
+             * @return The name.
              */
-            @java.lang.Override
-            public float getLength() {
-                return length_;
+            public java.lang.String getName() {
+                java.lang.Object ref = name_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    name_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
             }
 
             /**
-             * <code>float length = 1;</code>
-             * @param value The length to set.
+             * <code>string name = 1;</code>
+             * @return The bytes for name.
+             */
+            public com.google.protobuf.ByteString getNameBytes() {
+                java.lang.Object ref = name_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    name_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @param value The name to set.
              * @return This builder for chaining.
              */
-            public Builder setLength(float value) {
-                length_ = value;
+            public Builder setName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                name_ = value;
                 bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>float length = 1;</code>
+             * <code>string name = 1;</code>
              * @return This builder for chaining.
              */
-            public Builder clearLength() {
+            public Builder clearName() {
+                name_ = getDefaultInstance().getName();
                 bitField0_ = (bitField0_ & ~0x00000001);
-                length_ = 0F;
                 onChanged();
                 return this;
             }
 
-            private java.lang.Object source_ = "";
+            /**
+             * <code>string name = 1;</code>
+             * @param value The bytes for name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                name_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private context.ContextOuterClass.OpticalLinkDetails opticalDetails_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> opticalDetailsBuilder_;
 
             /**
-             * <code>string source = 2;</code>
-             * @return The source.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             * @return Whether the opticalDetails field is set.
              */
-            public java.lang.String getSource() {
-                java.lang.Object ref = source_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    source_ = s;
-                    return s;
+            public boolean hasOpticalDetails() {
+                return ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             * @return The opticalDetails.
+             */
+            public context.ContextOuterClass.OpticalLinkDetails getOpticalDetails() {
+                if (opticalDetailsBuilder_ == null) {
+                    return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
                 } else {
-                    return (java.lang.String) ref;
+                    return opticalDetailsBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @return The bytes for source.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public com.google.protobuf.ByteString getSourceBytes() {
-                java.lang.Object ref = source_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    source_ = b;
-                    return b;
+            public Builder setOpticalDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (opticalDetailsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalDetails_ = value;
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    opticalDetailsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @param value The source to set.
-             * @return This builder for chaining.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public Builder setSource(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder setOpticalDetails(context.ContextOuterClass.OpticalLinkDetails.Builder builderForValue) {
+                if (opticalDetailsBuilder_ == null) {
+                    opticalDetails_ = builderForValue.build();
+                } else {
+                    opticalDetailsBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            public Builder mergeOpticalDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (opticalDetailsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && opticalDetails_ != null && opticalDetails_ != context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance()) {
+                        getOpticalDetailsBuilder().mergeFrom(value);
+                    } else {
+                        opticalDetails_ = value;
+                    }
+                } else {
+                    opticalDetailsBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            public Builder clearOpticalDetails() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                opticalDetails_ = null;
+                if (opticalDetailsBuilder_ != null) {
+                    opticalDetailsBuilder_.dispose();
+                    opticalDetailsBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkDetails.Builder getOpticalDetailsBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getOpticalDetailsFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder() {
+                if (opticalDetailsBuilder_ != null) {
+                    return opticalDetailsBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> getOpticalDetailsFieldBuilder() {
+                if (opticalDetailsBuilder_ == null) {
+                    opticalDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder>(getOpticalDetails(), getParentForChildren(), isClean());
+                    opticalDetails_ = null;
+                }
+                return opticalDetailsBuilder_;
+            }
+
+            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 = 3;</code>
+             * @return Whether the linkId field is set.
+             */
+            public boolean hasLinkId() {
+                return ((bitField0_ & 0x00000004) != 0);
+            }
+
+            /**
+             * <code>.context.LinkId link_id = 3;</code>
+             * @return The linkId.
+             */
+            public context.ContextOuterClass.LinkId getLinkId() {
+                if (linkIdBuilder_ == null) {
+                    return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+                } else {
+                    return linkIdBuilder_.getMessage();
                 }
-                source_ = value;
-                bitField0_ |= 0x00000002;
-                onChanged();
-                return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder clearSource() {
-                source_ = getDefaultInstance().getSource();
-                bitField0_ = (bitField0_ & ~0x00000002);
+            public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+                if (linkIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    linkId_ = value;
+                } else {
+                    linkIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @param value The bytes for source to set.
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder setSourceBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder setLinkId(context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (linkIdBuilder_ == null) {
+                    linkId_ = builderForValue.build();
+                } else {
+                    linkIdBuilder_.setMessage(builderForValue.build());
                 }
-                checkByteStringIsUtf8(value);
-                source_ = value;
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
-            private java.lang.Object target_ = "";
-
             /**
-             * <code>string target = 3;</code>
-             * @return The target.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public java.lang.String getTarget() {
-                java.lang.Object ref = target_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    target_ = s;
-                    return s;
+            public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+                if (linkIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000004) != 0) && linkId_ != null && linkId_ != context.ContextOuterClass.LinkId.getDefaultInstance()) {
+                        getLinkIdBuilder().mergeFrom(value);
+                    } else {
+                        linkId_ = value;
+                    }
                 } else {
-                    return (java.lang.String) ref;
+                    linkIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @return The bytes for target.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public com.google.protobuf.ByteString getTargetBytes() {
-                java.lang.Object ref = target_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    target_ = b;
-                    return b;
-                } else {
-                    return (com.google.protobuf.ByteString) ref;
+            public Builder clearLinkId() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
+                    linkIdBuilder_ = null;
                 }
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @param value The target to set.
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder setTarget(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                target_ = value;
+            public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
                 bitField0_ |= 0x00000004;
                 onChanged();
-                return this;
+                return getLinkIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder clearTarget() {
-                target_ = getDefaultInstance().getTarget();
-                bitField0_ = (bitField0_ & ~0x00000004);
-                onChanged();
-                return this;
+            public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+                if (linkIdBuilder_ != null) {
+                    return linkIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+                }
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @param value The bytes for target to set.
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder setTargetBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            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;
                 }
-                checkByteStringIsUtf8(value);
-                target_ = value;
-                bitField0_ |= 0x00000004;
-                onChanged();
-                return this;
+                return linkIdBuilder_;
             }
 
-            private java.util.List<context.ContextOuterClass.Fiber> fibers_ = java.util.Collections.emptyList();
+            private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ = java.util.Collections.emptyList();
 
-            private void ensureFibersIsMutable() {
+            private void ensureLinkEndpointIdsIsMutable() {
                 if (!((bitField0_ & 0x00000008) != 0)) {
-                    fibers_ = new java.util.ArrayList<context.ContextOuterClass.Fiber>(fibers_);
+                    linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
                     bitField0_ |= 0x00000008;
                 }
             }
 
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> fibersBuilder_;
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
-                if (fibersBuilder_ == null) {
-                    return java.util.Collections.unmodifiableList(fibers_);
+            public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(linkEndpointIds_);
                 } else {
-                    return fibersBuilder_.getMessageList();
+                    return linkEndpointIdsBuilder_.getMessageList();
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public int getFibersCount() {
-                if (fibersBuilder_ == null) {
-                    return fibers_.size();
+            public int getLinkEndpointIdsCount() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.size();
                 } else {
-                    return fibersBuilder_.getCount();
+                    return linkEndpointIdsBuilder_.getCount();
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber getFibers(int index) {
-                if (fibersBuilder_ == null) {
-                    return fibers_.get(index);
+            public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.get(index);
                 } else {
-                    return fibersBuilder_.getMessage(index);
+                    return linkEndpointIdsBuilder_.getMessage(index);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder setFibers(int index, context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.set(index, value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.set(index, value);
                     onChanged();
                 } else {
-                    fibersBuilder_.setMessage(index, value);
+                    linkEndpointIdsBuilder_.setMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder setFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.set(index, builderForValue.build());
+            public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.set(index, builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.setMessage(index, builderForValue.build());
+                    linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.add(value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(value);
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(value);
+                    linkEndpointIdsBuilder_.addMessage(value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(int index, context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.add(index, value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(index, value);
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(index, value);
+                    linkEndpointIdsBuilder_.addMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.add(builderForValue.build());
+            public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(builderForValue.build());
+                    linkEndpointIdsBuilder_.addMessage(builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.add(index, builderForValue.build());
+            public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(index, builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(index, builderForValue.build());
+                    linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addAllFibers(java.lang.Iterable<? extends context.ContextOuterClass.Fiber> values) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, fibers_);
+            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 {
-                    fibersBuilder_.addAllMessages(values);
+                    linkEndpointIdsBuilder_.addAllMessages(values);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder clearFibers() {
-                if (fibersBuilder_ == null) {
-                    fibers_ = java.util.Collections.emptyList();
+            public Builder clearLinkEndpointIds() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    linkEndpointIds_ = java.util.Collections.emptyList();
                     bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
-                    fibersBuilder_.clear();
+                    linkEndpointIdsBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder removeFibers(int index) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.remove(index);
+            public Builder removeLinkEndpointIds(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.remove(index);
                     onChanged();
                 } else {
-                    fibersBuilder_.remove(index);
+                    linkEndpointIdsBuilder_.remove(index);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder getFibersBuilder(int index) {
-                return getFibersFieldBuilder().getBuilder(index);
+            public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(int index) {
+                return getLinkEndpointIdsFieldBuilder().getBuilder(index);
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
-                if (fibersBuilder_ == null) {
-                    return fibers_.get(index);
+            public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.get(index);
                 } else {
-                    return fibersBuilder_.getMessageOrBuilder(index);
+                    return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
-                if (fibersBuilder_ != null) {
-                    return fibersBuilder_.getMessageOrBuilderList();
+            public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
+                if (linkEndpointIdsBuilder_ != null) {
+                    return linkEndpointIdsBuilder_.getMessageOrBuilderList();
                 } else {
-                    return java.util.Collections.unmodifiableList(fibers_);
+                    return java.util.Collections.unmodifiableList(linkEndpointIds_);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder addFibersBuilder() {
-                return getFibersFieldBuilder().addBuilder(context.ContextOuterClass.Fiber.getDefaultInstance());
+            public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+                return getLinkEndpointIdsFieldBuilder().addBuilder(context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder addFibersBuilder(int index) {
-                return getFibersFieldBuilder().addBuilder(index, context.ContextOuterClass.Fiber.getDefaultInstance());
+            public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(int index) {
+                return getLinkEndpointIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<context.ContextOuterClass.Fiber.Builder> getFibersBuilderList() {
-                return getFibersFieldBuilder().getBuilderList();
+            public java.util.List<context.ContextOuterClass.EndPointId.Builder> getLinkEndpointIdsBuilderList() {
+                return getLinkEndpointIdsFieldBuilder().getBuilderList();
             }
 
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> getFibersFieldBuilder() {
-                if (fibersBuilder_ == null) {
-                    fibersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder>(fibers_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
-                    fibers_ = null;
+            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_ & 0x00000008) != 0), getParentForChildren(), isClean());
+                    linkEndpointIds_ = null;
                 }
-                return fibersBuilder_;
+                return linkEndpointIdsBuilder_;
             }
 
             @java.lang.Override
@@ -75420,24 +79661,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLinkDetails)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLink)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLinkDetails)
-        private static final context.ContextOuterClass.OpticalLinkDetails DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLink)
+        private static final context.ContextOuterClass.OpticalLink DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkDetails();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLink();
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLink getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLinkDetails> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkDetails>() {
+        private static final com.google.protobuf.Parser<OpticalLink> PARSER = new com.google.protobuf.AbstractParser<OpticalLink>() {
 
             @java.lang.Override
-            public OpticalLinkDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public OpticalLink parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -75452,199 +79693,148 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLinkDetails> parser() {
+        public static com.google.protobuf.Parser<OpticalLink> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLinkDetails> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLink> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLink)
+    public interface ServiceConfigRuleOrBuilder extends // @@protoc_insertion_point(interface_extends:context.ServiceConfigRule)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string name = 1;</code>
-         * @return The name.
-         */
-        java.lang.String getName();
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The bytes for name.
-         */
-        com.google.protobuf.ByteString getNameBytes();
-
-        /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return Whether the details field is set.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return Whether the serviceId field is set.
          */
-        boolean hasDetails();
+        boolean hasServiceId();
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return The details.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return The serviceId.
          */
-        context.ContextOuterClass.OpticalLinkDetails getDetails();
+        context.ContextOuterClass.ServiceId getServiceId();
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * <code>.context.ServiceId service_id = 1;</code>
          */
-        context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder();
+        context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return Whether the configruleCustom field is set.
          */
-        boolean hasOpticalLinkUuid();
+        boolean hasConfigruleCustom();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return The configruleCustom.
          */
-        context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid();
+        context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
          */
-        context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder();
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalLink}
+     * Protobuf type {@code context.ServiceConfigRule}
      */
-    public static final class OpticalLink extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLink)
-    OpticalLinkOrBuilder {
+    public static final class ServiceConfigRule extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.ServiceConfigRule)
+    ServiceConfigRuleOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLink.newBuilder() to construct.
-        private OpticalLink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use ServiceConfigRule.newBuilder() to construct.
+        private ServiceConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLink() {
-            name_ = "";
+        private ServiceConfigRule() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLink();
+            return new ServiceConfigRule();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+            return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
-        }
-
-        public static final int NAME_FIELD_NUMBER = 1;
-
-        @SuppressWarnings("serial")
-        private volatile java.lang.Object name_ = "";
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The name.
-         */
-        @java.lang.Override
-        public java.lang.String getName() {
-            java.lang.Object ref = name_;
-            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();
-                name_ = s;
-                return s;
-            }
-        }
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The bytes for name.
-         */
-        @java.lang.Override
-        public com.google.protobuf.ByteString getNameBytes() {
-            java.lang.Object ref = name_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                name_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+            return context.ContextOuterClass.internal_static_context_ServiceConfigRule_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ServiceConfigRule.class, context.ContextOuterClass.ServiceConfigRule.Builder.class);
         }
 
-        public static final int DETAILS_FIELD_NUMBER = 2;
+        public static final int SERVICE_ID_FIELD_NUMBER = 1;
 
-        private context.ContextOuterClass.OpticalLinkDetails details_;
+        private context.ContextOuterClass.ServiceId serviceId_;
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return Whether the details field is set.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return Whether the serviceId field is set.
          */
         @java.lang.Override
-        public boolean hasDetails() {
-            return details_ != null;
+        public boolean hasServiceId() {
+            return serviceId_ != null;
         }
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return The details.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return The serviceId.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetails getDetails() {
-            return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+        public context.ContextOuterClass.ServiceId getServiceId() {
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * <code>.context.ServiceId service_id = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
-            return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+        public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
-        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 3;
+        public static final int CONFIGRULE_CUSTOM_FIELD_NUMBER = 2;
 
-        private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+        private context.ContextOuterClass.ConfigRule_Custom configruleCustom_;
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return Whether the configruleCustom field is set.
          */
         @java.lang.Override
-        public boolean hasOpticalLinkUuid() {
-            return opticalLinkUuid_ != null;
+        public boolean hasConfigruleCustom() {
+            return configruleCustom_ != null;
         }
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return The configruleCustom.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom() {
+            return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
         }
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder() {
+            return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -75662,14 +79852,11 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
-            }
-            if (details_ != null) {
-                output.writeMessage(2, getDetails());
+            if (serviceId_ != null) {
+                output.writeMessage(1, getServiceId());
             }
-            if (opticalLinkUuid_ != null) {
-                output.writeMessage(3, getOpticalLinkUuid());
+            if (configruleCustom_ != null) {
+                output.writeMessage(2, getConfigruleCustom());
             }
             getUnknownFields().writeTo(output);
         }
@@ -75680,14 +79867,11 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
-            }
-            if (details_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDetails());
+            if (serviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getServiceId());
             }
-            if (opticalLinkUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getOpticalLinkUuid());
+            if (configruleCustom_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getConfigruleCustom());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -75699,22 +79883,20 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLink)) {
+            if (!(obj instanceof context.ContextOuterClass.ServiceConfigRule)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLink other = (context.ContextOuterClass.OpticalLink) obj;
-            if (!getName().equals(other.getName()))
-                return false;
-            if (hasDetails() != other.hasDetails())
+            context.ContextOuterClass.ServiceConfigRule other = (context.ContextOuterClass.ServiceConfigRule) obj;
+            if (hasServiceId() != other.hasServiceId())
                 return false;
-            if (hasDetails()) {
-                if (!getDetails().equals(other.getDetails()))
+            if (hasServiceId()) {
+                if (!getServiceId().equals(other.getServiceId()))
                     return false;
             }
-            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+            if (hasConfigruleCustom() != other.hasConfigruleCustom())
                 return false;
-            if (hasOpticalLinkUuid()) {
-                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+            if (hasConfigruleCustom()) {
+                if (!getConfigruleCustom().equals(other.getConfigruleCustom()))
                     return false;
             }
             if (!getUnknownFields().equals(other.getUnknownFields()))
@@ -75729,66 +79911,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + NAME_FIELD_NUMBER;
-            hash = (53 * hash) + getName().hashCode();
-            if (hasDetails()) {
-                hash = (37 * hash) + DETAILS_FIELD_NUMBER;
-                hash = (53 * hash) + getDetails().hashCode();
+            if (hasServiceId()) {
+                hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getServiceId().hashCode();
             }
-            if (hasOpticalLinkUuid()) {
-                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalLinkUuid().hashCode();
+            if (hasConfigruleCustom()) {
+                hash = (37 * hash) + CONFIGRULE_CUSTOM_FIELD_NUMBER;
+                hash = (53 * hash) + getConfigruleCustom().hashCode();
             }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -75801,7 +79981,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLink prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.ServiceConfigRule prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -75817,21 +79997,21 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLink}
+         * Protobuf type {@code context.ServiceConfigRule}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLink)
-        context.ContextOuterClass.OpticalLinkOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.ServiceConfigRule)
+        context.ContextOuterClass.ServiceConfigRuleOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ServiceConfigRule.class, context.ContextOuterClass.ServiceConfigRule.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLink.newBuilder()
+            // Construct using context.ContextOuterClass.ServiceConfigRule.newBuilder()
             private Builder() {
             }
 
@@ -75843,33 +80023,32 @@ public final class ContextOuterClass {
             public Builder clear() {
                 super.clear();
                 bitField0_ = 0;
-                name_ = "";
-                details_ = null;
-                if (detailsBuilder_ != null) {
-                    detailsBuilder_.dispose();
-                    detailsBuilder_ = null;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
+                    serviceIdBuilder_ = null;
                 }
-                opticalLinkUuid_ = null;
-                if (opticalLinkUuidBuilder_ != null) {
-                    opticalLinkUuidBuilder_.dispose();
-                    opticalLinkUuidBuilder_ = null;
+                configruleCustom_ = null;
+                if (configruleCustomBuilder_ != null) {
+                    configruleCustomBuilder_.dispose();
+                    configruleCustomBuilder_ = null;
                 }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLink.getDefaultInstance();
+            public context.ContextOuterClass.ServiceConfigRule getDefaultInstanceForType() {
+                return context.ContextOuterClass.ServiceConfigRule.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink build() {
-                context.ContextOuterClass.OpticalLink result = buildPartial();
+            public context.ContextOuterClass.ServiceConfigRule build() {
+                context.ContextOuterClass.ServiceConfigRule result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -75877,8 +80056,8 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink buildPartial() {
-                context.ContextOuterClass.OpticalLink result = new context.ContextOuterClass.OpticalLink(this);
+            public context.ContextOuterClass.ServiceConfigRule buildPartial() {
+                context.ContextOuterClass.ServiceConfigRule result = new context.ContextOuterClass.ServiceConfigRule(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -75886,42 +80065,34 @@ public final class ContextOuterClass {
                 return result;
             }
 
-            private void buildPartial0(context.ContextOuterClass.OpticalLink result) {
+            private void buildPartial0(context.ContextOuterClass.ServiceConfigRule result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
-                    result.name_ = name_;
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
                 }
                 if (((from_bitField0_ & 0x00000002) != 0)) {
-                    result.details_ = detailsBuilder_ == null ? details_ : detailsBuilder_.build();
-                }
-                if (((from_bitField0_ & 0x00000004) != 0)) {
-                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_ == null ? opticalLinkUuid_ : opticalLinkUuidBuilder_.build();
+                    result.configruleCustom_ = configruleCustomBuilder_ == null ? configruleCustom_ : configruleCustomBuilder_.build();
                 }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLink) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLink) other);
+                if (other instanceof context.ContextOuterClass.ServiceConfigRule) {
+                    return mergeFrom((context.ContextOuterClass.ServiceConfigRule) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLink other) {
-                if (other == context.ContextOuterClass.OpticalLink.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.ServiceConfigRule other) {
+                if (other == context.ContextOuterClass.ServiceConfigRule.getDefaultInstance())
                     return this;
-                if (!other.getName().isEmpty()) {
-                    name_ = other.name_;
-                    bitField0_ |= 0x00000001;
-                    onChanged();
-                }
-                if (other.hasDetails()) {
-                    mergeDetails(other.getDetails());
+                if (other.hasServiceId()) {
+                    mergeServiceId(other.getServiceId());
                 }
-                if (other.hasOpticalLinkUuid()) {
-                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                if (other.hasConfigruleCustom()) {
+                    mergeConfigruleCustom(other.getConfigruleCustom());
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
@@ -75948,25 +80119,18 @@ public final class ContextOuterClass {
                                 break;
                             case 10:
                                 {
-                                    name_ = input.readStringRequireUtf8();
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000001;
                                     break;
                                 }
                             // case 10
                             case 18:
                                 {
-                                    input.readMessage(getDetailsFieldBuilder().getBuilder(), extensionRegistry);
+                                    input.readMessage(getConfigruleCustomFieldBuilder().getBuilder(), extensionRegistry);
                                     bitField0_ |= 0x00000002;
                                     break;
                                 }
                             // case 18
-                            case 26:
-                                {
-                                    input.readMessage(getOpticalLinkUuidFieldBuilder().getBuilder(), extensionRegistry);
-                                    bitField0_ |= 0x00000004;
-                                    break;
-                                }
-                            // case 26
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -75990,315 +80154,240 @@ public final class ContextOuterClass {
 
             private int bitField0_;
 
-            private java.lang.Object name_ = "";
-
-            /**
-             * <code>string name = 1;</code>
-             * @return The name.
-             */
-            public java.lang.String getName() {
-                java.lang.Object ref = name_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    name_ = s;
-                    return s;
-                } else {
-                    return (java.lang.String) ref;
-                }
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @return The bytes for name.
-             */
-            public com.google.protobuf.ByteString getNameBytes() {
-                java.lang.Object ref = name_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    name_ = b;
-                    return b;
-                } else {
-                    return (com.google.protobuf.ByteString) ref;
-                }
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @param value The name to set.
-             * @return This builder for chaining.
-             */
-            public Builder setName(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                name_ = value;
-                bitField0_ |= 0x00000001;
-                onChanged();
-                return this;
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearName() {
-                name_ = getDefaultInstance().getName();
-                bitField0_ = (bitField0_ & ~0x00000001);
-                onChanged();
-                return this;
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @param value The bytes for name to set.
-             * @return This builder for chaining.
-             */
-            public Builder setNameBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                checkByteStringIsUtf8(value);
-                name_ = value;
-                bitField0_ |= 0x00000001;
-                onChanged();
-                return this;
-            }
-
-            private context.ContextOuterClass.OpticalLinkDetails details_;
+            private context.ContextOuterClass.ServiceId serviceId_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> detailsBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
-             * @return Whether the details field is set.
+             * <code>.context.ServiceId service_id = 1;</code>
+             * @return Whether the serviceId field is set.
              */
-            public boolean hasDetails() {
-                return ((bitField0_ & 0x00000002) != 0);
+            public boolean hasServiceId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
-             * @return The details.
+             * <code>.context.ServiceId service_id = 1;</code>
+             * @return The serviceId.
              */
-            public context.ContextOuterClass.OpticalLinkDetails getDetails() {
-                if (detailsBuilder_ == null) {
-                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+            public context.ContextOuterClass.ServiceId getServiceId() {
+                if (serviceIdBuilder_ == null) {
+                    return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
                 } else {
-                    return detailsBuilder_.getMessage();
+                    return serviceIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails value) {
-                if (detailsBuilder_ == null) {
+            public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+                if (serviceIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    details_ = value;
+                    serviceId_ = value;
                 } else {
-                    detailsBuilder_.setMessage(value);
+                    serviceIdBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails.Builder builderForValue) {
-                if (detailsBuilder_ == null) {
-                    details_ = builderForValue.build();
+            public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
+                if (serviceIdBuilder_ == null) {
+                    serviceId_ = builderForValue.build();
                 } else {
-                    detailsBuilder_.setMessage(builderForValue.build());
+                    serviceIdBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder mergeDetails(context.ContextOuterClass.OpticalLinkDetails value) {
-                if (detailsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0) && details_ != null && details_ != context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance()) {
-                        getDetailsBuilder().mergeFrom(value);
+            public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+                if (serviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
-                        details_ = value;
+                        serviceId_ = value;
                     }
                 } else {
-                    detailsBuilder_.mergeFrom(value);
+                    serviceIdBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder clearDetails() {
-                bitField0_ = (bitField0_ & ~0x00000002);
-                details_ = null;
-                if (detailsBuilder_ != null) {
-                    detailsBuilder_.dispose();
-                    detailsBuilder_ = null;
+            public Builder clearServiceId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
+                    serviceIdBuilder_ = null;
                 }
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public context.ContextOuterClass.OpticalLinkDetails.Builder getDetailsBuilder() {
-                bitField0_ |= 0x00000002;
+            public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
-                return getDetailsFieldBuilder().getBuilder();
+                return getServiceIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
-                if (detailsBuilder_ != null) {
-                    return detailsBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+                if (serviceIdBuilder_ != null) {
+                    return serviceIdBuilder_.getMessageOrBuilder();
                 } else {
-                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+                    return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> getDetailsFieldBuilder() {
-                if (detailsBuilder_ == null) {
-                    detailsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder>(getDetails(), getParentForChildren(), isClean());
-                    details_ = null;
+            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 detailsBuilder_;
+                return serviceIdBuilder_;
             }
 
-            private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+            private context.ContextOuterClass.ConfigRule_Custom configruleCustom_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> opticalLinkUuidBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> configruleCustomBuilder_;
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-             * @return Whether the opticalLinkUuid field is set.
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+             * @return Whether the configruleCustom field is set.
              */
-            public boolean hasOpticalLinkUuid() {
-                return ((bitField0_ & 0x00000004) != 0);
+            public boolean hasConfigruleCustom() {
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-             * @return The opticalLinkUuid.
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+             * @return The configruleCustom.
              */
-            public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+            public context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom() {
+                if (configruleCustomBuilder_ == null) {
+                    return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
                 } else {
-                    return opticalLinkUuidBuilder_.getMessage();
+                    return configruleCustomBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
-                if (opticalLinkUuidBuilder_ == null) {
+            public Builder setConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+                if (configruleCustomBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalLinkUuid_ = value;
+                    configruleCustom_ = value;
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(value);
+                    configruleCustomBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId.Builder builderForValue) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = builderForValue.build();
+            public Builder setConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+                if (configruleCustomBuilder_ == null) {
+                    configruleCustom_ = builderForValue.build();
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                    configruleCustomBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0) && opticalLinkUuid_ != null && opticalLinkUuid_ != context.ContextOuterClass.OpticalLinkId.getDefaultInstance()) {
-                        getOpticalLinkUuidBuilder().mergeFrom(value);
+            public Builder mergeConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+                if (configruleCustomBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && configruleCustom_ != null && configruleCustom_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+                        getConfigruleCustomBuilder().mergeFrom(value);
                     } else {
-                        opticalLinkUuid_ = value;
+                        configruleCustom_ = value;
                     }
                 } else {
-                    opticalLinkUuidBuilder_.mergeFrom(value);
+                    configruleCustomBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder clearOpticalLinkUuid() {
-                bitField0_ = (bitField0_ & ~0x00000004);
-                opticalLinkUuid_ = null;
-                if (opticalLinkUuidBuilder_ != null) {
-                    opticalLinkUuidBuilder_.dispose();
-                    opticalLinkUuidBuilder_ = null;
+            public Builder clearConfigruleCustom() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                configruleCustom_ = null;
+                if (configruleCustomBuilder_ != null) {
+                    configruleCustomBuilder_.dispose();
+                    configruleCustomBuilder_ = null;
                 }
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public context.ContextOuterClass.OpticalLinkId.Builder getOpticalLinkUuidBuilder() {
-                bitField0_ |= 0x00000004;
+            public context.ContextOuterClass.ConfigRule_Custom.Builder getConfigruleCustomBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
-                return getOpticalLinkUuidFieldBuilder().getBuilder();
+                return getConfigruleCustomFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
-                if (opticalLinkUuidBuilder_ != null) {
-                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder() {
+                if (configruleCustomBuilder_ != null) {
+                    return configruleCustomBuilder_.getMessageOrBuilder();
                 } else {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+                    return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> getOpticalLinkUuidFieldBuilder() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
-                    opticalLinkUuid_ = null;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> getConfigruleCustomFieldBuilder() {
+                if (configruleCustomBuilder_ == null) {
+                    configruleCustomBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(getConfigruleCustom(), getParentForChildren(), isClean());
+                    configruleCustom_ = null;
                 }
-                return opticalLinkUuidBuilder_;
+                return configruleCustomBuilder_;
             }
 
             @java.lang.Override
@@ -76310,24 +80399,24 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLink)
+            // @@protoc_insertion_point(builder_scope:context.ServiceConfigRule)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLink)
-        private static final context.ContextOuterClass.OpticalLink DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.ServiceConfigRule)
+        private static final context.ContextOuterClass.ServiceConfigRule DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLink();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfigRule();
         }
 
-        public static context.ContextOuterClass.OpticalLink getDefaultInstance() {
+        public static context.ContextOuterClass.ServiceConfigRule getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLink> PARSER = new com.google.protobuf.AbstractParser<OpticalLink>() {
+        private static final com.google.protobuf.Parser<ServiceConfigRule> PARSER = new com.google.protobuf.AbstractParser<ServiceConfigRule>() {
 
             @java.lang.Override
-            public OpticalLink parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            public ServiceConfigRule parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
                 Builder builder = newBuilder();
                 try {
                     builder.mergeFrom(input, extensionRegistry);
@@ -76342,17 +80431,17 @@ public final class ContextOuterClass {
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLink> parser() {
+        public static com.google.protobuf.Parser<ServiceConfigRule> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLink> getParserForType() {
+        public com.google.protobuf.Parser<ServiceConfigRule> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+        public context.ContextOuterClass.ServiceConfigRule getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
@@ -76661,6 +80750,14 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Constraint_Exclusions_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_QoSProfileId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_QoSProfileId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Constraint_QoSProfile_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Constraint_QoSProfile_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;
@@ -76685,26 +80782,42 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigList_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkId_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalConfigEvent_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkId_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigEvent_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_FiberId_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalEndPointId_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_FiberId_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalEndPointId_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Fiber_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkList_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Fiber_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkList_fieldAccessorTable;
 
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_CSlotsEntry_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_LSlotsEntry_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_SSlotsEntry_fieldAccessorTable;
+
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLink_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLink_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceConfigRule_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceConfigRule_fieldAccessorTable;
+
     public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
         return descriptor;
     }
@@ -76712,7 +80825,7 @@ public final class ContextOuterClass {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\214\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\"\211\001\n\017TopologyDetails\022(\n\013topol" + "ogy_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004nam" + "e\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Devic" + "e\022\034\n\005links\030\004 \003(\0132\r.context.Link\";\n\016Topol" + "ogyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.contex" + "t.TopologyId\"5\n\014TopologyList\022%\n\ntopologi" + "es\030\001 \003(\0132\021.context.Topology\"X\n\rTopologyE" + "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013t" + "opology_id\030\002 \001(\0132\023.context.TopologyId\".\n" + "\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.context" + ".Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.co" + "ntext.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_t" + "ype\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.conte" + "xt.DeviceConfig\022G\n\031device_operational_st" + "atus\030\005 \001(\0162$.context.DeviceOperationalSt" + "atusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.conte" + "xt.DeviceDriverEnum\022+\n\020device_endpoints\030" + "\007 \003(\0132\021.context.EndPoint\022&\n\ncomponents\030\010" + " \003(\0132\022.context.Component\022(\n\rcontroller_i" + "d\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tComponent" + "\022%\n\016component_uuid\030\001 \001(\0132\r.context.Uuid\022" + "\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattribute" + "s\030\004 \003(\0132\".context.Component.AttributesEn" + "try\022\016\n\006parent\030\005 \001(\t\0321\n\017AttributesEntry\022\013" + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014Device" + "Config\022)\n\014config_rules\030\001 \003(\0132\023.context.C" + "onfigRule\"5\n\014DeviceIdList\022%\n\ndevice_ids\030" + "\001 \003(\0132\021.context.DeviceId\".\n\nDeviceList\022 " + "\n\007devices\030\001 \003(\0132\017.context.Device\"\216\001\n\014Dev" + "iceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025.context." + "DeviceIdList\022\031\n\021include_endpoints\030\002 \001(\010\022" + "\034\n\024include_config_rules\030\003 \001(\010\022\032\n\022include" + "_components\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005eve" + "nt\030\001 \001(\0132\016.context.Event\022$\n\tdevice_id\030\002 " + "\001(\0132\021.context.DeviceId\022,\n\rdevice_config\030" + "\003 \001(\0132\025.context.DeviceConfig\"*\n\006LinkId\022 " + "\n\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"I\n\016Link" + "Attributes\022\033\n\023total_capacity_gbps\030\001 \001(\002\022" + "\032\n\022used_capacity_gbps\030\002 \001(\002\"\223\001\n\004Link\022 \n\007" + "link_id\030\001 \001(\0132\017.context.LinkId\022\014\n\004name\030\002" + " \001(\t\022.\n\021link_endpoint_ids\030\003 \003(\0132\023.contex" + "t.EndPointId\022+\n\nattributes\030\004 \001(\0132\027.conte" + "xt.LinkAttributes\"/\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\"\333\002\n" + "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" + "erviceId\022\014\n\004name\030\002 \001(\t\022.\n\014service_type\030\003" + " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + "e_endpoint_ids\030\004 \003(\0132\023.context.EndPointI" + "d\0220\n\023service_constraints\030\005 \003(\0132\023.context" + ".Constraint\022.\n\016service_status\030\006 \001(\0132\026.co" + "ntext.ServiceStatus\022.\n\016service_config\030\007 " + "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + "\030\010 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + "\030\001 \003(\0132\020.context.Service\"\225\001\n\rServiceFilt" + "er\022+\n\013service_ids\030\001 \001(\0132\026.context.Servic" + "eIdList\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n" + "\023include_constraints\030\003 \001(\010\022\034\n\024include_co" + "nfig_rules\030\004 \001(\010\"U\n\014ServiceEvent\022\035\n\005even" + "t\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002 " + "\001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nco" + "ntext_id\030\001 \001(\0132\022.context.ContextId\022!\n\nsl" + "ice_uuid\030\002 \001(\0132\r.context.Uuid\"\240\003\n\005Slice\022" + "\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022\014\n\004n" + "ame\030\002 \001(\t\022/\n\022slice_endpoint_ids\030\003 \003(\0132\023." + "context.EndPointId\022.\n\021slice_constraints\030" + "\004 \003(\0132\023.context.Constraint\022-\n\021slice_serv" + "ice_ids\030\005 \003(\0132\022.context.ServiceId\022,\n\022sli" + "ce_subslice_ids\030\006 \003(\0132\020.context.SliceId\022" + "*\n\014slice_status\030\007 \001(\0132\024.context.SliceSta" + "tus\022*\n\014slice_config\030\010 \001(\0132\024.context.Slic" + "eConfig\022(\n\013slice_owner\030\t \001(\0132\023.context.S" + "liceOwner\022%\n\ttimestamp\030\n \001(\0132\022.context.T" + "imestamp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001" + "(\0132\r.context.Uuid\022\024\n\014owner_string\030\002 \001(\t\"" + "=\n\013SliceStatus\022.\n\014slice_status\030\001 \001(\0162\030.c" + "ontext.SliceStatusEnum\"8\n\013SliceConfig\022)\n" + "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" + "\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.con" + "text.SliceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(" + "\0132\016.context.Slice\"\312\001\n\013SliceFilter\022\'\n\tsli" + "ce_ids\030\001 \001(\0132\024.context.SliceIdList\022\034\n\024in" + "clude_endpoint_ids\030\002 \001(\010\022\033\n\023include_cons" + "traints\030\003 \001(\010\022\033\n\023include_service_ids\030\004 \001" + "(\010\022\034\n\024include_subslice_ids\030\005 \001(\010\022\034\n\024incl" + "ude_config_rules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005" + "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" + "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" + "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" + "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" + "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" + "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" + "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" + " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" + "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" + "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" + "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" + "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" + "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" + "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" + "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" + "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" + "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" + "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" + ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" + "\rconnection_id\030\001 \001(\0132\025.context.Connectio" + "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" + "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" + "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" + "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" + "\033.context.ConnectionSettings\"A\n\020Connecti" + "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" + "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" + "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" + "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." + "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" + "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" + "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" + "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" + "uid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010EndPoint\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020" + "kpi_sample_types\030\004 \003(\0162\037.kpi_sample_type" + "s.KpiSampleType\022,\n\021endpoint_location\030\005 \001" + "(\0132\021.context.Location\"{\n\014EndPointName\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoint_name\030\003 " + "\001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016EndPointId" + "List\022)\n\014endpoint_ids\030\001 \003(\0132\023.context.End" + "PointId\"A\n\020EndPointNameList\022-\n\016endpoint_" + "names\030\001 \003(\0132\025.context.EndPointName\"A\n\021Co" + "nfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n" + "\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022" + "(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPointI" + "d\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n" + "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" + "nfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.context" + ".ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.cont" + "ext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n\021C" + "onstraint_Custom\022\027\n\017constraint_type\030\001 \001(" + "\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constrain" + "t_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rd" + "uration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010la" + "titude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Locat" + "ion\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 " + "\001(\0132\025.context.GPS_PositionH\000B\n\n\010location" + "\"l\n\033Constraint_EndPointLocation\022(\n\013endpo" + "int_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010loc" + "ation\030\002 \001(\0132\021.context.Location\"Y\n\033Constr" + "aint_EndPointPriority\022(\n\013endpoint_id\030\001 \001" + "(\0132\023.context.EndPointId\022\020\n\010priority\030\002 \001(" + "\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_laten" + "cy_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025" + "\n\rcapacity_gbps\030\001 \001(\002\"c\n\033Constraint_SLA_" + "Availability\022\032\n\022num_disjoint_paths\030\001 \001(\r" + "\022\022\n\nall_active\030\002 \001(\010\022\024\n\014availability\030\003 \001" + "(\002\"V\n\036Constraint_SLA_Isolation_level\0224\n\017" + "isolation_level\030\001 \003(\0162\033.context.Isolatio" + "nLevelEnum\"\242\001\n\025Constraint_Exclusions\022\024\n\014" + "is_permanent\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021" + ".context.DeviceId\022)\n\014endpoint_ids\030\003 \003(\0132" + "\023.context.EndPointId\022!\n\010link_ids\030\004 \003(\0132\017" + ".context.LinkId\"\333\004\n\nConstraint\022-\n\006action" + "\030\001 \001(\0162\035.context.ConstraintActionEnum\022,\n" + "\006custom\030\002 \001(\0132\032.context.Constraint_Custo" + "mH\000\0220\n\010schedule\030\003 \001(\0132\034.context.Constrai" + "nt_ScheduleH\000\022A\n\021endpoint_location\030\004 \001(\013" + "2$.context.Constraint_EndPointLocationH\000" + "\022A\n\021endpoint_priority\030\005 \001(\0132$.context.Co" + "nstraint_EndPointPriorityH\000\0228\n\014sla_capac" + "ity\030\006 \001(\0132 .context.Constraint_SLA_Capac" + "ityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.context.Con" + "straint_SLA_LatencyH\000\022@\n\020sla_availabilit" + "y\030\010 \001(\0132$.context.Constraint_SLA_Availab" + "ilityH\000\022@\n\rsla_isolation\030\t \001(\0132\'.context" + ".Constraint_SLA_Isolation_levelH\000\0224\n\nexc" + "lusions\030\n \001(\0132\036.context.Constraint_Exclu" + "sionsH\000B\014\n\nconstraint\"^\n\022TeraFlowControl" + "ler\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" + "tId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n" + "\024AuthenticationResult\022&\n\ncontext_id\030\001 \001(" + "\0132\022.context.ContextId\022\025\n\rauthenticated\030\002" + " \001(\010\"-\n\017OpticalConfigId\022\032\n\022opticalconfig" + "_uuid\030\001 \001(\t\"S\n\rOpticalConfig\0222\n\020opticalc" + "onfig_id\030\001 \001(\0132\030.context.OpticalConfigId" + "\022\016\n\006config\030\002 \001(\t\"C\n\021OpticalConfigList\022.\n" + "\016opticalconfigs\030\001 \003(\0132\026.context.OpticalC" + "onfig\"9\n\rOpticalLinkId\022(\n\021optical_link_u" + "uid\030\001 \001(\0132\r.context.Uuid\",\n\007FiberId\022!\n\nf" + "iber_uuid\030\001 \001(\0132\r.context.Uuid\"\341\001\n\005Fiber" + "\022\n\n\002ID\030\n \001(\t\022\020\n\010src_port\030\001 \001(\t\022\020\n\010dst_po" + "rt\030\002 \001(\t\022\027\n\017local_peer_port\030\003 \001(\t\022\030\n\020rem" + "ote_peer_port\030\004 \001(\t\022\017\n\007c_slots\030\005 \003(\005\022\017\n\007" + "l_slots\030\006 \003(\005\022\017\n\007s_slots\030\007 \003(\005\022\016\n\006length" + "\030\010 \001(\002\022\014\n\004used\030\t \001(\010\022$\n\nfiber_uuid\030\013 \001(\013" + "2\020.context.FiberId\"d\n\022OpticalLinkDetails" + "\022\016\n\006length\030\001 \001(\002\022\016\n\006source\030\002 \001(\t\022\016\n\006targ" + "et\030\003 \001(\t\022\036\n\006fibers\030\004 \003(\0132\016.context.Fiber" + "\"|\n\013OpticalLink\022\014\n\004name\030\001 \001(\t\022,\n\007details" + "\030\002 \001(\0132\033.context.OpticalLinkDetails\0221\n\021o" + "ptical_link_uuid\030\003 \001(\0132\026.context.Optical" + "LinkId*j\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UND" + "EFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTT" + "YPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\376\002\n\020D" + "eviceDriverEnum\022\032\n\026DEVICEDRIVER_UNDEFINE" + "D\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVI" + "CEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER" + "_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOL" + "OGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_532\020\005\022\023\n\017DE" + "VICEDRIVER_XR\020\006\022\033\n\027DEVICEDRIVER_IETF_L2V" + "PN\020\007\022 \n\034DEVICEDRIVER_GNMI_OPENCONFIG\020\010\022\034" + "\n\030DEVICEDRIVER_OPTICAL_TFS\020\t\022\032\n\026DEVICEDR" + "IVER_IETF_ACTN\020\n\022\023\n\017DEVICEDRIVER_OC\020\013\022\024\n" + "\020DEVICEDRIVER_QKD\020\014*\217\001\n\033DeviceOperationa" + "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" + "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" + "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" + "LED\020\002*\345\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" + "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" + "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" + "CTIVITY_SERVICE\020\003\022\022\n\016SERVICETYPE_TE\020\004\022\023\n" + "\017SERVICETYPE_E2E\020\005\022$\n SERVICETYPE_OPTICA" + "L_CONNECTIVITY\020\006\022\023\n\017SERVICETYPE_QKD\020\007*\304\001" + "\n\021ServiceStatusEnum\022\033\n\027SERVICESTATUS_UND" + "EFINED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024S" + "ERVICESTATUS_ACTIVE\020\002\022\032\n\026SERVICESTATUS_U" + "PDATING\020\003\022!\n\035SERVICESTATUS_PENDING_REMOV" + "AL\020\004\022\036\n\032SERVICESTATUS_SLA_VIOLATED\020\005*\251\001\n" + "\017SliceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINE" + "D\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTA" + "TUS_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SL" + "ICESTATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VI" + "OLATED\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGAC" + "TION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027" + "\n\023CONFIGACTION_DELETE\020\002*m\n\024ConstraintAct" + "ionEnum\022\036\n\032CONSTRAINTACTION_UNDEFINED\020\000\022" + "\030\n\024CONSTRAINTACTION_SET\020\001\022\033\n\027CONSTRAINTA" + "CTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020\n" + "\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022" + "\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLAT" + "ION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n\032" + "PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_" + "RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTION" + "S_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\246\031\n" + "\016ContextService\022:\n\016ListContextIds\022\016.cont" + "ext.Empty\032\026.context.ContextIdList\"\000\0226\n\014L" + "istContexts\022\016.context.Empty\032\024.context.Co" + "ntextList\"\000\0224\n\nGetContext\022\022.context.Cont" + "extId\032\020.context.Context\"\000\0224\n\nSetContext\022" + "\020.context.Context\032\022.context.ContextId\"\000\022" + "5\n\rRemoveContext\022\022.context.ContextId\032\016.c" + "ontext.Empty\"\000\022=\n\020GetContextEvents\022\016.con" + "text.Empty\032\025.context.ContextEvent\"\0000\001\022@\n" + "\017ListTopologyIds\022\022.context.ContextId\032\027.c" + "ontext.TopologyIdList\"\000\022=\n\016ListTopologie" + "s\022\022.context.ContextId\032\025.context.Topology" + "List\"\000\0227\n\013GetTopology\022\023.context.Topology" + "Id\032\021.context.Topology\"\000\022E\n\022GetTopologyDe" + "tails\022\023.context.TopologyId\032\030.context.Top" + "ologyDetails\"\000\0227\n\013SetTopology\022\021.context." + "Topology\032\023.context.TopologyId\"\000\0227\n\016Remov" + "eTopology\022\023.context.TopologyId\032\016.context" + ".Empty\"\000\022?\n\021GetTopologyEvents\022\016.context." + "Empty\032\026.context.TopologyEvent\"\0000\001\0228\n\rLis" + "tDeviceIds\022\016.context.Empty\032\025.context.Dev" + "iceIdList\"\000\0224\n\013ListDevices\022\016.context.Emp" + "ty\032\023.context.DeviceList\"\000\0221\n\tGetDevice\022\021" + ".context.DeviceId\032\017.context.Device\"\000\0221\n\t" + "SetDevice\022\017.context.Device\032\021.context.Dev" + "iceId\"\000\0223\n\014RemoveDevice\022\021.context.Device" + "Id\032\016.context.Empty\"\000\022;\n\017GetDeviceEvents\022" + "\016.context.Empty\032\024.context.DeviceEvent\"\0000" + "\001\022<\n\014SelectDevice\022\025.context.DeviceFilter" + "\032\023.context.DeviceList\"\000\022I\n\021ListEndPointN" + "ames\022\027.context.EndPointIdList\032\031.context." + "EndPointNameList\"\000\0224\n\013ListLinkIds\022\016.cont" + "ext.Empty\032\023.context.LinkIdList\"\000\0220\n\tList" + "Links\022\016.context.Empty\032\021.context.LinkList" + "\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.context" + ".Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.cont" + "ext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.Lin" + "kId\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.c" + "ontext.ServiceIdList\"\000\022:\n\014ListServices\022\022" + ".context.ContextId\032\024.context.ServiceList" + "\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020.c" + "ontext.Service\"\000\0224\n\nSetService\022\020.context" + ".Service\032\022.context.ServiceId\"\000\0226\n\014UnsetS" + "ervice\022\020.context.Service\032\022.context.Servi" + "ceId\"\000\0225\n\rRemoveService\022\022.context.Servic" + "eId\032\016.context.Empty\"\000\022=\n\020GetServiceEvent" + "s\022\016.context.Empty\032\025.context.ServiceEvent" + "\"\0000\001\022?\n\rSelectService\022\026.context.ServiceF" + "ilter\032\024.context.ServiceList\"\000\022:\n\014ListSli" + "ceIds\022\022.context.ContextId\032\024.context.Slic" + "eIdList\"\000\0226\n\nListSlices\022\022.context.Contex" + "tId\032\022.context.SliceList\"\000\022.\n\010GetSlice\022\020." + "context.SliceId\032\016.context.Slice\"\000\022.\n\010Set" + "Slice\022\016.context.Slice\032\020.context.SliceId\"" + "\000\0220\n\nUnsetSlice\022\016.context.Slice\032\020.contex" + "t.SliceId\"\000\0221\n\013RemoveSlice\022\020.context.Sli" + "ceId\032\016.context.Empty\"\000\0229\n\016GetSliceEvents" + "\022\016.context.Empty\032\023.context.SliceEvent\"\0000" + "\001\0229\n\013SelectSlice\022\024.context.SliceFilter\032\022" + ".context.SliceList\"\000\022D\n\021ListConnectionId" + "s\022\022.context.ServiceId\032\031.context.Connecti" + "onIdList\"\000\022@\n\017ListConnections\022\022.context." + "ServiceId\032\027.context.ConnectionList\"\000\022=\n\r" + "GetConnection\022\025.context.ConnectionId\032\023.c" + "ontext.Connection\"\000\022=\n\rSetConnection\022\023.c" + "ontext.Connection\032\025.context.ConnectionId" + "\"\000\022;\n\020RemoveConnection\022\025.context.Connect" + "ionId\032\016.context.Empty\"\000\022C\n\023GetConnection" + "Events\022\016.context.Empty\032\030.context.Connect" + "ionEvent\"\0000\001\022@\n\020GetOpticalConfig\022\016.conte" + "xt.Empty\032\032.context.OpticalConfigList\"\000\022F" + "\n\020SetOpticalConfig\022\026.context.OpticalConf" + "ig\032\030.context.OpticalConfigId\"\000\022I\n\023Select" + "OpticalConfig\022\030.context.OpticalConfigId\032" + "\026.context.OpticalConfig\"\000\0228\n\016SetOpticalL" + "ink\022\024.context.OpticalLink\032\016.context.Empt" + "y\"\000\022@\n\016GetOpticalLink\022\026.context.OpticalL" + "inkId\032\024.context.OpticalLink\"\000\022.\n\010GetFibe" + "r\022\020.context.FiberId\032\016.context.Fiber\"\000b\006p" + "roto3" };
+        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\267\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\022)\n\020optical_link_ids\030\005 \003(\0132\017." + "context.LinkId\"\266\001\n\017TopologyDetails\022(\n\013to" + "pology_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004" + "name\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.De" + "vice\022\034\n\005links\030\004 \003(\0132\r.context.Link\022+\n\rop" + "tical_links\030\005 \003(\0132\024.context.OpticalLink\"" + ";\n\016TopologyIdList\022)\n\014topology_ids\030\001 \003(\0132" + "\023.context.TopologyId\"5\n\014TopologyList\022%\n\n" + "topologies\030\001 \003(\0132\021.context.Topology\"X\n\rT" + "opologyEvent\022\035\n\005event\030\001 \001(\0132\016.context.Ev" + "ent\022(\n\013topology_id\030\002 \001(\0132\023.context.Topol" + "ogyId\".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r" + ".context.Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 " + "\001(\0132\021.context.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013" + "device_type\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\013" + "2\025.context.DeviceConfig\022G\n\031device_operat" + "ional_status\030\005 \001(\0162$.context.DeviceOpera" + "tionalStatusEnum\0221\n\016device_drivers\030\006 \003(\016" + "2\031.context.DeviceDriverEnum\022+\n\020device_en" + "dpoints\030\007 \003(\0132\021.context.EndPoint\022&\n\ncomp" + "onents\030\010 \003(\0132\022.context.Component\022(\n\rcont" + "roller_id\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tC" + "omponent\022%\n\016component_uuid\030\001 \001(\0132\r.conte" + "xt.Uuid\022\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\na" + "ttributes\030\004 \003(\0132\".context.Component.Attr" + "ibutesEntry\022\016\n\006parent\030\005 \001(\t\0321\n\017Attribute" + "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9" + "\n\014DeviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.c" + "ontext.ConfigRule\"5\n\014DeviceIdList\022%\n\ndev" + "ice_ids\030\001 \003(\0132\021.context.DeviceId\".\n\nDevi" + "ceList\022 \n\007devices\030\001 \003(\0132\017.context.Device" + "\"\216\001\n\014DeviceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025." + "context.DeviceIdList\022\031\n\021include_endpoint" + "s\030\002 \001(\010\022\034\n\024include_config_rules\030\003 \001(\010\022\032\n" + "\022include_components\030\004 \001(\010\"\200\001\n\013DeviceEven" + "t\022\035\n\005event\030\001 \001(\0132\016.context.Event\022$\n\tdevi" + "ce_id\030\002 \001(\0132\021.context.DeviceId\022,\n\rdevice" + "_config\030\003 \001(\0132\025.context.DeviceConfig\"*\n\006" + "LinkId\022 \n\tlink_uuid\030\001 \001(\0132\r.context.Uuid" + "\"I\n\016LinkAttributes\022\033\n\023total_capacity_gbp" + "s\030\001 \001(\002\022\032\n\022used_capacity_gbps\030\002 \001(\002\"\275\001\n\004" + "Link\022 \n\007link_id\030\001 \001(\0132\017.context.LinkId\022\014" + "\n\004name\030\002 \001(\t\022(\n\tlink_type\030\003 \001(\0162\025.contex" + "t.LinkTypeEnum\022.\n\021link_endpoint_ids\030\004 \003(" + "\0132\023.context.EndPointId\022+\n\nattributes\030\005 \001" + "(\0132\027.context.LinkAttributes\"/\n\nLinkIdLis" + "t\022!\n\010link_ids\030\001 \003(\0132\017.context.LinkId\"(\n\010" + "LinkList\022\034\n\005links\030\001 \003(\0132\r.context.Link\"L" + "\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.context.Eve" + "nt\022 \n\007link_id\030\002 \001(\0132\017.context.LinkId\"X\n\t" + "ServiceId\022&\n\ncontext_id\030\001 \001(\0132\022.context." + "ContextId\022#\n\014service_uuid\030\002 \001(\0132\r.contex" + "t.Uuid\"\333\002\n\007Service\022&\n\nservice_id\030\001 \001(\0132\022" + ".context.ServiceId\022\014\n\004name\030\002 \001(\t\022.\n\014serv" + "ice_type\030\003 \001(\0162\030.context.ServiceTypeEnum" + "\0221\n\024service_endpoint_ids\030\004 \003(\0132\023.context" + ".EndPointId\0220\n\023service_constraints\030\005 \003(\013" + "2\023.context.Constraint\022.\n\016service_status\030" + "\006 \001(\0132\026.context.ServiceStatus\022.\n\016service" + "_config\030\007 \001(\0132\026.context.ServiceConfig\022%\n" + "\ttimestamp\030\010 \001(\0132\022.context.Timestamp\"C\n\r" + "ServiceStatus\0222\n\016service_status\030\001 \001(\0162\032." + "context.ServiceStatusEnum\":\n\rServiceConf" + "ig\022)\n\014config_rules\030\001 \003(\0132\023.context.Confi" + "gRule\"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.context.Service\"\225\001\n\rS" + "erviceFilter\022+\n\013service_ids\030\001 \001(\0132\026.cont" + "ext.ServiceIdList\022\034\n\024include_endpoint_id" + "s\030\002 \001(\010\022\033\n\023include_constraints\030\003 \001(\010\022\034\n\024" + "include_config_rules\030\004 \001(\010\"U\n\014ServiceEve" + "nt\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&\n\nser" + "vice_id\030\002 \001(\0132\022.context.ServiceId\"T\n\007Sli" + "ceId\022&\n\ncontext_id\030\001 \001(\0132\022.context.Conte" + "xtId\022!\n\nslice_uuid\030\002 \001(\0132\r.context.Uuid\"" + "\240\003\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.context.Sl" + "iceId\022\014\n\004name\030\002 \001(\t\022/\n\022slice_endpoint_id" + "s\030\003 \003(\0132\023.context.EndPointId\022.\n\021slice_co" + "nstraints\030\004 \003(\0132\023.context.Constraint\022-\n\021" + "slice_service_ids\030\005 \003(\0132\022.context.Servic" + "eId\022,\n\022slice_subslice_ids\030\006 \003(\0132\020.contex" + "t.SliceId\022*\n\014slice_status\030\007 \001(\0132\024.contex" + "t.SliceStatus\022*\n\014slice_config\030\010 \001(\0132\024.co" + "ntext.SliceConfig\022(\n\013slice_owner\030\t \001(\0132\023" + ".context.SliceOwner\022%\n\ttimestamp\030\n \001(\0132\022" + ".context.Timestamp\"E\n\nSliceOwner\022!\n\nowne" + "r_uuid\030\001 \001(\0132\r.context.Uuid\022\024\n\014owner_str" + "ing\030\002 \001(\t\"=\n\013SliceStatus\022.\n\014slice_status" + "\030\001 \001(\0162\030.context.SliceStatusEnum\"8\n\013Slic" + "eConfig\022)\n\014config_rules\030\001 \003(\0132\023.context." + "ConfigRule\"2\n\013SliceIdList\022#\n\tslice_ids\030\001" + " \003(\0132\020.context.SliceId\"+\n\tSliceList\022\036\n\006s" + "lices\030\001 \003(\0132\016.context.Slice\"\312\001\n\013SliceFil" + "ter\022\'\n\tslice_ids\030\001 \001(\0132\024.context.SliceId" + "List\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n\023in" + "clude_constraints\030\003 \001(\010\022\033\n\023include_servi" + "ce_ids\030\004 \001(\010\022\034\n\024include_subslice_ids\030\005 \001" + "(\010\022\034\n\024include_config_rules\030\006 \001(\010\"O\n\nSlic" + "eEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022\"\n" + "\010slice_id\030\002 \001(\0132\020.context.SliceId\"6\n\014Con" + "nectionId\022&\n\017connection_uuid\030\001 \001(\0132\r.con" + "text.Uuid\"2\n\025ConnectionSettings_L0\022\031\n\021ls" + "p_symbolic_name\030\001 \001(\t\"\236\001\n\025ConnectionSett" + "ings_L2\022\027\n\017src_mac_address\030\001 \001(\t\022\027\n\017dst_" + "mac_address\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n" + "\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mp" + "ls_traffic_class\030\006 \001(\r\"t\n\025ConnectionSett" + "ings_L3\022\026\n\016src_ip_address\030\001 \001(\t\022\026\n\016dst_i" + "p_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protoco" + "l\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025ConnectionSettin" + "gs_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(" + "\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022Co" + "nnectionSettings\022*\n\002l0\030\001 \001(\0132\036.context.C" + "onnectionSettings_L0\022*\n\002l2\030\002 \001(\0132\036.conte" + "xt.ConnectionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.c" + "ontext.ConnectionSettings_L3\022*\n\002l4\030\004 \001(\013" + "2\036.context.ConnectionSettings_L4\"\363\001\n\nCon" + "nection\022,\n\rconnection_id\030\001 \001(\0132\025.context" + ".ConnectionId\022&\n\nservice_id\030\002 \001(\0132\022.cont" + "ext.ServiceId\0223\n\026path_hops_endpoint_ids\030" + "\003 \003(\0132\023.context.EndPointId\022+\n\017sub_servic" + "e_ids\030\004 \003(\0132\022.context.ServiceId\022-\n\010setti" + "ngs\030\005 \001(\0132\033.context.ConnectionSettings\"A" + "\n\020ConnectionIdList\022-\n\016connection_ids\030\001 \003" + "(\0132\025.context.ConnectionId\":\n\016ConnectionL" + "ist\022(\n\013connections\030\001 \003(\0132\023.context.Conne" + "ction\"^\n\017ConnectionEvent\022\035\n\005event\030\001 \001(\0132" + "\016.context.Event\022,\n\rconnection_id\030\002 \001(\0132\025" + ".context.ConnectionId\"\202\001\n\nEndPointId\022(\n\013" + "topology_id\030\001 \001(\0132\023.context.TopologyId\022$" + "\n\tdevice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\r" + "endpoint_uuid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010E" + "ndPoint\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type" + "\030\003 \001(\t\0229\n\020kpi_sample_types\030\004 \003(\0162\037.kpi_s" + "ample_types.KpiSampleType\022,\n\021endpoint_lo" + "cation\030\005 \001(\0132\021.context.Location\"{\n\014EndPo" + "intName\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoi" + "nt_name\030\003 \001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016" + "EndPointIdList\022)\n\014endpoint_ids\030\001 \003(\0132\023.c" + "ontext.EndPointId\"A\n\020EndPointNameList\022-\n" + "\016endpoint_names\030\001 \003(\0132\025.context.EndPoint" + "Name\"A\n\021ConfigRule_Custom\022\024\n\014resource_ke" + "y\030\001 \001(\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016Confi" + "gRule_ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.context" + ".EndPointId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclR" + "uleSet\"\234\001\n\nConfigRule\022)\n\006action\030\001 \001(\0162\031." + "context.ConfigActionEnum\022,\n\006custom\030\002 \001(\013" + "2\032.context.ConfigRule_CustomH\000\022&\n\003acl\030\003 " + "\001(\0132\027.context.ConfigRule_ACLH\000B\r\n\013config" + "_rule\"F\n\021Constraint_Custom\022\027\n\017constraint" + "_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n" + "\023Constraint_Schedule\022\027\n\017start_timestamp\030" + "\001 \001(\001\022\025\n\rduration_days\030\002 \001(\002\"3\n\014GPS_Posi" + "tion\022\020\n\010latitude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(" + "\002\"\204\001\n\010Location\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_" + "position\030\002 \001(\0132\025.context.GPS_PositionH\000\022" + "\023\n\tinterface\030\003 \001(\tH\000\022\026\n\014circuit_pack\030\004 \001" + "(\tH\000B\n\n\010location\"l\n\033Constraint_EndPointL" + "ocation\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022#\n\010location\030\002 \001(\0132\021.context.Lo" + "cation\"Y\n\033Constraint_EndPointPriority\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\020\n\010priority\030\002 \001(\r\"0\n\026Constraint_SLA_Late" + "ncy\022\026\n\016e2e_latency_ms\030\001 \001(\002\"0\n\027Constrain" + "t_SLA_Capacity\022\025\n\rcapacity_gbps\030\001 \001(\002\"c\n" + "\033Constraint_SLA_Availability\022\032\n\022num_disj" + "oint_paths\030\001 \001(\r\022\022\n\nall_active\030\002 \001(\010\022\024\n\014" + "availability\030\003 \001(\002\"V\n\036Constraint_SLA_Iso" + "lation_level\0224\n\017isolation_level\030\001 \003(\0162\033." + "context.IsolationLevelEnum\"\242\001\n\025Constrain" + "t_Exclusions\022\024\n\014is_permanent\030\001 \001(\010\022%\n\nde" + "vice_ids\030\002 \003(\0132\021.context.DeviceId\022)\n\014end" + "point_ids\030\003 \003(\0132\023.context.EndPointId\022!\n\010" + "link_ids\030\004 \003(\0132\017.context.LinkId\"5\n\014QoSPr" + "ofileId\022%\n\016qos_profile_id\030\001 \001(\0132\r.contex" + "t.Uuid\"`\n\025Constraint_QoSProfile\022-\n\016qos_p" + "rofile_id\030\001 \001(\0132\025.context.QoSProfileId\022\030" + "\n\020qos_profile_name\030\002 \001(\t\"\222\005\n\nConstraint\022" + "-\n\006action\030\001 \001(\0162\035.context.ConstraintActi" + "onEnum\022,\n\006custom\030\002 \001(\0132\032.context.Constra" + "int_CustomH\000\0220\n\010schedule\030\003 \001(\0132\034.context" + ".Constraint_ScheduleH\000\022A\n\021endpoint_locat" + "ion\030\004 \001(\0132$.context.Constraint_EndPointL" + "ocationH\000\022A\n\021endpoint_priority\030\005 \001(\0132$.c" + "ontext.Constraint_EndPointPriorityH\000\0228\n\014" + "sla_capacity\030\006 \001(\0132 .context.Constraint_" + "SLA_CapacityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.co" + "ntext.Constraint_SLA_LatencyH\000\022@\n\020sla_av" + "ailability\030\010 \001(\0132$.context.Constraint_SL" + "A_AvailabilityH\000\022@\n\rsla_isolation\030\t \001(\0132" + "\'.context.Constraint_SLA_Isolation_level" + "H\000\0224\n\nexclusions\030\n \001(\0132\036.context.Constra" + "int_ExclusionsH\000\0225\n\013qos_profile\030\013 \001(\0132\036." + "context.Constraint_QoSProfileH\000B\014\n\nconst" + "raint\"^\n\022TeraFlowController\022&\n\ncontext_i" + "d\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_addres" + "s\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationR" + "esult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Cont" + "extId\022\025\n\rauthenticated\030\002 \001(\010\"-\n\017OpticalC" + "onfigId\022\032\n\022opticalconfig_uuid\030\001 \001(\t\"y\n\rO" + "pticalConfig\0222\n\020opticalconfig_id\030\001 \001(\0132\030" + ".context.OpticalConfigId\022\016\n\006config\030\002 \001(\t" + "\022$\n\tdevice_id\030\003 \001(\0132\021.context.DeviceId\"C" + "\n\021OpticalConfigList\022.\n\016opticalconfigs\030\001 " + "\003(\0132\026.context.OpticalConfig\"g\n\022OpticalCo" + "nfigEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event" + "\0222\n\020opticalconfig_id\030\002 \001(\0132\030.context.Opt" + "icalConfigId\"_\n\021OpticalEndPointId\022$\n\tdev" + "ice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpo" + "int_uuid\030\003 \001(\0132\r.context.Uuid\">\n\017Optical" + "LinkList\022+\n\roptical_links\030\001 \003(\0132\024.contex" + "t.OpticalLink\"\304\003\n\022OpticalLinkDetails\022\016\n\006" + "length\030\001 \001(\002\022\020\n\010src_port\030\002 \001(\t\022\020\n\010dst_po" + "rt\030\003 \001(\t\022\027\n\017local_peer_port\030\004 \001(\t\022\030\n\020rem" + "ote_peer_port\030\005 \001(\t\022\014\n\004used\030\006 \001(\010\0228\n\007c_s" + "lots\030\007 \003(\0132\'.context.OpticalLinkDetails." + "CSlotsEntry\0228\n\007l_slots\030\010 \003(\0132\'.context.O" + "pticalLinkDetails.LSlotsEntry\0228\n\007s_slots" + "\030\t \003(\0132\'.context.OpticalLinkDetails.SSlo" + "tsEntry\032-\n\013CSlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005v" + "alue\030\002 \001(\005:\0028\001\032-\n\013LSlotsEntry\022\013\n\003key\030\001 \001" + "(\t\022\r\n\005value\030\002 \001(\005:\0028\001\032-\n\013SSlotsEntry\022\013\n\003" + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"\243\001\n\013Optical" + "Link\022\014\n\004name\030\001 \001(\t\0224\n\017optical_details\030\002 " + "\001(\0132\033.context.OpticalLinkDetails\022 \n\007link" + "_id\030\003 \001(\0132\017.context.LinkId\022.\n\021link_endpo" + "int_ids\030\004 \003(\0132\023.context.EndPointId\"r\n\021Se" + "rviceConfigRule\022&\n\nservice_id\030\001 \001(\0132\022.co" + "ntext.ServiceId\0225\n\021configrule_custom\030\002 \001" + "(\0132\032.context.ConfigRule_Custom*j\n\rEventT" + "ypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVEN" + "TTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020" + "EVENTTYPE_REMOVE\020\003*\316\003\n\020DeviceDriverEnum\022" + "\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRI" + "VER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPO" + "RT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICED" + "RIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICED" + "RIVER_ONF_TR_532\020\005\022\023\n\017DEVICEDRIVER_XR\020\006\022" + "\033\n\027DEVICEDRIVER_IETF_L2VPN\020\007\022 \n\034DEVICEDR" + "IVER_GNMI_OPENCONFIG\020\010\022\034\n\030DEVICEDRIVER_O" + "PTICAL_TFS\020\t\022\032\n\026DEVICEDRIVER_IETF_ACTN\020\n" + "\022\023\n\017DEVICEDRIVER_OC\020\013\022\024\n\020DEVICEDRIVER_QK" + "D\020\014\022\033\n\027DEVICEDRIVER_IETF_L3VPN\020\r\022\033\n\027DEVI" + "CEDRIVER_IETF_SLICE\020\016\022\024\n\020DEVICEDRIVER_NC" + "E\020\017*\217\001\n\033DeviceOperationalStatusEnum\022%\n!D" + "EVICEOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DE" + "VICEOPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVI" + "CEOPERATIONALSTATUS_ENABLED\020\002*w\n\014LinkTyp" + "eEnum\022\024\n\020LINKTYPE_UNKNOWN\020\000\022\023\n\017LINKTYPE_" + "COPPER\020\001\022\022\n\016LINKTYPE_FIBER\020\002\022\022\n\016LINKTYPE" + "_RADIO\020\003\022\024\n\020LINKTYPE_VIRTUAL\020\004*\345\001\n\017Servi" + "ceTypeEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020S" + "ERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022" + ")\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE" + "\020\003\022\022\n\016SERVICETYPE_TE\020\004\022\023\n\017SERVICETYPE_E2" + "E\020\005\022$\n SERVICETYPE_OPTICAL_CONNECTIVITY\020" + "\006\022\023\n\017SERVICETYPE_QKD\020\007*\304\001\n\021ServiceStatus" + "Enum\022\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SER" + "VICESTATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_AC" + "TIVE\020\002\022\032\n\026SERVICESTATUS_UPDATING\020\003\022!\n\035SE" + "RVICESTATUS_PENDING_REMOVAL\020\004\022\036\n\032SERVICE" + "STATUS_SLA_VIOLATED\020\005*\251\001\n\017SliceStatusEnu" + "m\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023SLICESTA" + "TUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022S" + "LICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATUS_DEINI" + "T\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005*]\n\020Con" + "figActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020" + "\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_" + "DELETE\020\002*m\n\024ConstraintActionEnum\022\036\n\032CONS" + "TRAINTACTION_UNDEFINED\020\000\022\030\n\024CONSTRAINTAC" + "TION_SET\020\001\022\033\n\027CONSTRAINTACTION_DELETE\020\002*" + "\203\002\n\022IsolationLevelEnum\022\020\n\014NO_ISOLATION\020\000" + "\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_ISOL" + "ATION\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PHYSIC" + "AL_MEMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NETWOR" + "K_ISOLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLAT" + "ION\020\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION\020\007\022\025" + "\n\021SERVICE_ISOLATION\020\0102\202\034\n\016ContextService" + "\022:\n\016ListContextIds\022\016.context.Empty\032\026.con" + "text.ContextIdList\"\000\0226\n\014ListContexts\022\016.c" + "ontext.Empty\032\024.context.ContextList\"\000\0224\n\n" + "GetContext\022\022.context.ContextId\032\020.context" + ".Context\"\000\0224\n\nSetContext\022\020.context.Conte" + "xt\032\022.context.ContextId\"\000\0225\n\rRemoveContex" + "t\022\022.context.ContextId\032\016.context.Empty\"\000\022" + "=\n\020GetContextEvents\022\016.context.Empty\032\025.co" + "ntext.ContextEvent\"\0000\001\022@\n\017ListTopologyId" + "s\022\022.context.ContextId\032\027.context.Topology" + "IdList\"\000\022=\n\016ListTopologies\022\022.context.Con" + "textId\032\025.context.TopologyList\"\000\0227\n\013GetTo" + "pology\022\023.context.TopologyId\032\021.context.To" + "pology\"\000\022E\n\022GetTopologyDetails\022\023.context" + ".TopologyId\032\030.context.TopologyDetails\"\000\022" + "7\n\013SetTopology\022\021.context.Topology\032\023.cont" + "ext.TopologyId\"\000\0227\n\016RemoveTopology\022\023.con" + "text.TopologyId\032\016.context.Empty\"\000\022?\n\021Get" + "TopologyEvents\022\016.context.Empty\032\026.context" + ".TopologyEvent\"\0000\001\0228\n\rListDeviceIds\022\016.co" + "ntext.Empty\032\025.context.DeviceIdList\"\000\0224\n\013" + "ListDevices\022\016.context.Empty\032\023.context.De" + "viceList\"\000\0221\n\tGetDevice\022\021.context.Device" + "Id\032\017.context.Device\"\000\0221\n\tSetDevice\022\017.con" + "text.Device\032\021.context.DeviceId\"\000\0223\n\014Remo" + "veDevice\022\021.context.DeviceId\032\016.context.Em" + "pty\"\000\022;\n\017GetDeviceEvents\022\016.context.Empty" + "\032\024.context.DeviceEvent\"\0000\001\022<\n\014SelectDevi" + "ce\022\025.context.DeviceFilter\032\023.context.Devi" + "ceList\"\000\022I\n\021ListEndPointNames\022\027.context." + "EndPointIdList\032\031.context.EndPointNameLis" + "t\"\000\0224\n\013ListLinkIds\022\016.context.Empty\032\023.con" + "text.LinkIdList\"\000\0220\n\tListLinks\022\016.context" + ".Empty\032\021.context.LinkList\"\000\022+\n\007GetLink\022\017" + ".context.LinkId\032\r.context.Link\"\000\022+\n\007SetL" + "ink\022\r.context.Link\032\017.context.LinkId\"\000\022/\n" + "\nRemoveLink\022\017.context.LinkId\032\016.context.E" + "mpty\"\000\0227\n\rGetLinkEvents\022\016.context.Empty\032" + "\022.context.LinkEvent\"\0000\001\022>\n\016ListServiceId" + "s\022\022.context.ContextId\032\026.context.ServiceI" + "dList\"\000\022:\n\014ListServices\022\022.context.Contex" + "tId\032\024.context.ServiceList\"\000\0224\n\nGetServic" + "e\022\022.context.ServiceId\032\020.context.Service\"" + "\000\0224\n\nSetService\022\020.context.Service\032\022.cont" + "ext.ServiceId\"\000\0226\n\014UnsetService\022\020.contex" + "t.Service\032\022.context.ServiceId\"\000\0225\n\rRemov" + "eService\022\022.context.ServiceId\032\016.context.E" + "mpty\"\000\022=\n\020GetServiceEvents\022\016.context.Emp" + "ty\032\025.context.ServiceEvent\"\0000\001\022?\n\rSelectS" + "ervice\022\026.context.ServiceFilter\032\024.context" + ".ServiceList\"\000\022:\n\014ListSliceIds\022\022.context" + ".ContextId\032\024.context.SliceIdList\"\000\0226\n\nLi" + "stSlices\022\022.context.ContextId\032\022.context.S" + "liceList\"\000\022.\n\010GetSlice\022\020.context.SliceId" + "\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016.context" + ".Slice\032\020.context.SliceId\"\000\0220\n\nUnsetSlice" + "\022\016.context.Slice\032\020.context.SliceId\"\000\0221\n\013" + "RemoveSlice\022\020.context.SliceId\032\016.context." + "Empty\"\000\0229\n\016GetSliceEvents\022\016.context.Empt" + "y\032\023.context.SliceEvent\"\0000\001\0229\n\013SelectSlic" + "e\022\024.context.SliceFilter\032\022.context.SliceL" + "ist\"\000\022D\n\021ListConnectionIds\022\022.context.Ser" + "viceId\032\031.context.ConnectionIdList\"\000\022@\n\017L" + "istConnections\022\022.context.ServiceId\032\027.con" + "text.ConnectionList\"\000\022=\n\rGetConnection\022\025" + ".context.ConnectionId\032\023.context.Connecti" + "on\"\000\022=\n\rSetConnection\022\023.context.Connecti" + "on\032\025.context.ConnectionId\"\000\022;\n\020RemoveCon" + "nection\022\025.context.ConnectionId\032\016.context" + ".Empty\"\000\022C\n\023GetConnectionEvents\022\016.contex" + "t.Empty\032\030.context.ConnectionEvent\"\0000\001\022@\n" + "\020GetOpticalConfig\022\016.context.Empty\032\032.cont" + "ext.OpticalConfigList\"\000\022F\n\020SetOpticalCon" + "fig\022\026.context.OpticalConfig\032\030.context.Op" + "ticalConfigId\"\000\022I\n\023UpdateOpticalConfig\022\026" + ".context.OpticalConfig\032\030.context.Optical" + "ConfigId\"\000\022I\n\023SelectOpticalConfig\022\030.cont" + "ext.OpticalConfigId\032\026.context.OpticalCon" + "fig\"\000\022A\n\023DeleteOpticalConfig\022\030.context.O" + "pticalConfigId\032\016.context.Empty\"\000\022@\n\024Dele" + "teOpticalChannel\022\026.context.OpticalConfig" + "\032\016.context.Empty\"\000\0228\n\016SetOpticalLink\022\024.c" + "ontext.OpticalLink\032\016.context.Empty\"\000\0229\n\016" + "GetOpticalLink\022\017.context.LinkId\032\024.contex" + "t.OpticalLink\"\000\0226\n\021DeleteOpticalLink\022\017.c" + "ontext.LinkId\032\016.context.Empty\"\000\022@\n\022GetOp" + "ticalLinkList\022\016.context.Empty\032\030.context." + "OpticalLinkList\"\000\022G\n\027DeleteServiceConfig" + "Rule\022\032.context.ServiceConfigRule\032\016.conte" + "xt.Empty\"\000b\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { acl.Acl.getDescriptor(), kpi_sample_types.KpiSampleTypes.getDescriptor() });
         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[] {});
@@ -76735,9 +80848,9 @@ public final class ContextOuterClass {
         internal_static_context_TopologyId_descriptor = getDescriptor().getMessageTypes().get(9);
         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(10);
-        internal_static_context_Topology_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Topology_descriptor, new java.lang.String[] { "TopologyId", "Name", "DeviceIds", "LinkIds" });
+        internal_static_context_Topology_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Topology_descriptor, new java.lang.String[] { "TopologyId", "Name", "DeviceIds", "LinkIds", "OpticalLinkIds" });
         internal_static_context_TopologyDetails_descriptor = getDescriptor().getMessageTypes().get(11);
-        internal_static_context_TopologyDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_TopologyDetails_descriptor, new java.lang.String[] { "TopologyId", "Name", "Devices", "Links" });
+        internal_static_context_TopologyDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_TopologyDetails_descriptor, new java.lang.String[] { "TopologyId", "Name", "Devices", "Links", "OpticalLinks" });
         internal_static_context_TopologyIdList_descriptor = getDescriptor().getMessageTypes().get(12);
         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(13);
@@ -76767,7 +80880,7 @@ public final class ContextOuterClass {
         internal_static_context_LinkAttributes_descriptor = getDescriptor().getMessageTypes().get(24);
         internal_static_context_LinkAttributes_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_LinkAttributes_descriptor, new java.lang.String[] { "TotalCapacityGbps", "UsedCapacityGbps" });
         internal_static_context_Link_descriptor = getDescriptor().getMessageTypes().get(25);
-        internal_static_context_Link_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Link_descriptor, new java.lang.String[] { "LinkId", "Name", "LinkEndpointIds", "Attributes" });
+        internal_static_context_Link_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Link_descriptor, new java.lang.String[] { "LinkId", "Name", "LinkType", "LinkEndpointIds", "Attributes" });
         internal_static_context_LinkIdList_descriptor = getDescriptor().getMessageTypes().get(26);
         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(27);
@@ -76851,7 +80964,7 @@ public final class ContextOuterClass {
         internal_static_context_GPS_Position_descriptor = getDescriptor().getMessageTypes().get(66);
         internal_static_context_GPS_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_GPS_Position_descriptor, new java.lang.String[] { "Latitude", "Longitude" });
         internal_static_context_Location_descriptor = getDescriptor().getMessageTypes().get(67);
-        internal_static_context_Location_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Location_descriptor, new java.lang.String[] { "Region", "GpsPosition", "Location" });
+        internal_static_context_Location_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Location_descriptor, new java.lang.String[] { "Region", "GpsPosition", "Interface", "CircuitPack", "Location" });
         internal_static_context_Constraint_EndPointLocation_descriptor = getDescriptor().getMessageTypes().get(68);
         internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_EndPointLocation_descriptor, new java.lang.String[] { "EndpointId", "Location" });
         internal_static_context_Constraint_EndPointPriority_descriptor = getDescriptor().getMessageTypes().get(69);
@@ -76866,28 +80979,40 @@ public final class ContextOuterClass {
         internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Isolation_level_descriptor, new java.lang.String[] { "IsolationLevel" });
         internal_static_context_Constraint_Exclusions_descriptor = getDescriptor().getMessageTypes().get(74);
         internal_static_context_Constraint_Exclusions_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_Exclusions_descriptor, new java.lang.String[] { "IsPermanent", "DeviceIds", "EndpointIds", "LinkIds" });
-        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(75);
-        internal_static_context_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_descriptor, new java.lang.String[] { "Action", "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "Constraint" });
-        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(76);
+        internal_static_context_QoSProfileId_descriptor = getDescriptor().getMessageTypes().get(75);
+        internal_static_context_QoSProfileId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_QoSProfileId_descriptor, new java.lang.String[] { "QosProfileId" });
+        internal_static_context_Constraint_QoSProfile_descriptor = getDescriptor().getMessageTypes().get(76);
+        internal_static_context_Constraint_QoSProfile_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_QoSProfile_descriptor, new java.lang.String[] { "QosProfileId", "QosProfileName" });
+        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(77);
+        internal_static_context_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_descriptor, new java.lang.String[] { "Action", "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "QosProfile", "Constraint" });
+        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(78);
         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(77);
+        internal_static_context_AuthenticationResult_descriptor = getDescriptor().getMessageTypes().get(79);
         internal_static_context_AuthenticationResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_AuthenticationResult_descriptor, new java.lang.String[] { "ContextId", "Authenticated" });
-        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(78);
+        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(80);
         internal_static_context_OpticalConfigId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigId_descriptor, new java.lang.String[] { "OpticalconfigUuid" });
-        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(79);
-        internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config" });
-        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(80);
+        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(81);
+        internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config", "DeviceId" });
+        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(82);
         internal_static_context_OpticalConfigList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigList_descriptor, new java.lang.String[] { "Opticalconfigs" });
-        internal_static_context_OpticalLinkId_descriptor = getDescriptor().getMessageTypes().get(81);
-        internal_static_context_OpticalLinkId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkId_descriptor, new java.lang.String[] { "OpticalLinkUuid" });
-        internal_static_context_FiberId_descriptor = getDescriptor().getMessageTypes().get(82);
-        internal_static_context_FiberId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_FiberId_descriptor, new java.lang.String[] { "FiberUuid" });
-        internal_static_context_Fiber_descriptor = getDescriptor().getMessageTypes().get(83);
-        internal_static_context_Fiber_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Fiber_descriptor, new java.lang.String[] { "ID", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "CSlots", "LSlots", "SSlots", "Length", "Used", "FiberUuid" });
-        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(84);
-        internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "Source", "Target", "Fibers" });
-        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(85);
-        internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "Details", "OpticalLinkUuid" });
+        internal_static_context_OpticalConfigEvent_descriptor = getDescriptor().getMessageTypes().get(83);
+        internal_static_context_OpticalConfigEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigEvent_descriptor, new java.lang.String[] { "Event", "OpticalconfigId" });
+        internal_static_context_OpticalEndPointId_descriptor = getDescriptor().getMessageTypes().get(84);
+        internal_static_context_OpticalEndPointId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalEndPointId_descriptor, new java.lang.String[] { "DeviceId", "EndpointUuid" });
+        internal_static_context_OpticalLinkList_descriptor = getDescriptor().getMessageTypes().get(85);
+        internal_static_context_OpticalLinkList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkList_descriptor, new java.lang.String[] { "OpticalLinks" });
+        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(86);
+        internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "Used", "CSlots", "LSlots", "SSlots" });
+        internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(0);
+        internal_static_context_OpticalLinkDetails_CSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(1);
+        internal_static_context_OpticalLinkDetails_LSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(2);
+        internal_static_context_OpticalLinkDetails_SSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(87);
+        internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "OpticalDetails", "LinkId", "LinkEndpointIds" });
+        internal_static_context_ServiceConfigRule_descriptor = getDescriptor().getMessageTypes().get(88);
+        internal_static_context_ServiceConfigRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ServiceConfigRule_descriptor, new java.lang.String[] { "ServiceId", "ConfigruleCustom" });
         acl.Acl.getDescriptor();
         kpi_sample_types.KpiSampleTypes.getDescriptor();
     }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java
index 32544e6beba009b31b06dcd583893933c15eb1fe..d953e779fb114ce9b8f003b3c3b0b96537c4e6af 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextService.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextService.java
@@ -98,13 +98,23 @@ public interface ContextService extends MutinyService {
 
     io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request);
 
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request);
+
     io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request);
 
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request);
+
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request);
 
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request);
 
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request);
 
     io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
 
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
index d3c1b628573bf328f51de68a68d21690c2ff7045..3809f8afb198c144cdf1582e91de2f17ae7a6b18 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -409,6 +409,15 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
         }
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        try {
+            return delegate.updateOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
         try {
@@ -418,6 +427,24 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
         }
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        try {
+            return delegate.deleteOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+        try {
+            return delegate.deleteOpticalChannel(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
         try {
@@ -428,7 +455,7 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
         try {
             return delegate.getOpticalLink(request);
         } catch (UnsupportedOperationException e) {
@@ -437,9 +464,27 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+        try {
+            return delegate.deleteOpticalLink(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+        try {
+            return delegate.getOpticalLinkList(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
         try {
-            return delegate.getFiber(request);
+            return delegate.deleteServiceConfigRule(request);
         } catch (UnsupportedOperationException e) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
index b1773578d3448de901839bf6e70e855ff58ad9e5..00e56c4f4d68e6a2011c93c213fadf82143a8ba5 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -245,24 +245,49 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
         return stub.setOpticalConfig(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        return stub.updateOpticalConfig(request);
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
         return stub.selectOpticalConfig(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        return stub.deleteOpticalConfig(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+        return stub.deleteOpticalChannel(request);
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
         return stub.setOpticalLink(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
         return stub.getOpticalLink(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-        return stub.getFiber(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+        return stub.deleteOpticalLink(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+        return stub.getOpticalLinkList(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+        return stub.deleteServiceConfigRule(request);
     }
 
     @Override
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
index 233312dd76b68ffefd109cd2ec4ca48df68275fd..73a440e7a3c7800b437a5a966ab7c0227aad0cb5 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -779,6 +779,21 @@ public final class ContextServiceGrpc {
         return getSetOpticalConfigMethod;
     }
 
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "UpdateOpticalConfig", requestType = context.ContextOuterClass.OpticalConfig.class, responseType = context.ContextOuterClass.OpticalConfigId.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod;
+        if ((getUpdateOpticalConfigMethod = ContextServiceGrpc.getUpdateOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getUpdateOpticalConfigMethod = ContextServiceGrpc.getUpdateOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getUpdateOpticalConfigMethod = getUpdateOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UpdateOpticalConfig")).build();
+                }
+            }
+        }
+        return getUpdateOpticalConfigMethod;
+    }
+
     private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig> getSelectOpticalConfigMethod;
 
     @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SelectOpticalConfig", requestType = context.ContextOuterClass.OpticalConfigId.class, responseType = context.ContextOuterClass.OpticalConfig.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
@@ -794,6 +809,36 @@ public final class ContextServiceGrpc {
         return getSelectOpticalConfigMethod;
     }
 
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalConfig", requestType = context.ContextOuterClass.OpticalConfigId.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod;
+        if ((getDeleteOpticalConfigMethod = ContextServiceGrpc.getDeleteOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalConfigMethod = ContextServiceGrpc.getDeleteOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalConfigMethod = getDeleteOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteOpticalConfig")).build();
+                }
+            }
+        }
+        return getDeleteOpticalConfigMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalChannel", requestType = context.ContextOuterClass.OpticalConfig.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod;
+        if ((getDeleteOpticalChannelMethod = ContextServiceGrpc.getDeleteOpticalChannelMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalChannelMethod = ContextServiceGrpc.getDeleteOpticalChannelMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalChannelMethod = getDeleteOpticalChannelMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalChannel")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteOpticalChannel")).build();
+                }
+            }
+        }
+        return getDeleteOpticalChannelMethod;
+    }
+
     private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty> getSetOpticalLinkMethod;
 
     @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SetOpticalLink", requestType = context.ContextOuterClass.OpticalLink.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
@@ -809,34 +854,64 @@ public final class ContextServiceGrpc {
         return getSetOpticalLinkMethod;
     }
 
-    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
 
-    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLink", requestType = context.ContextOuterClass.OpticalLinkId.class, responseType = context.ContextOuterClass.OpticalLink.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod() {
-        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLink", requestType = context.ContextOuterClass.LinkId.class, responseType = context.ContextOuterClass.OpticalLink.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
         if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
             synchronized (ContextServiceGrpc.class) {
                 if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
-                    ContextServiceGrpc.getGetOpticalLinkMethod = getGetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLinkId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLink")).build();
+                    ContextServiceGrpc.getGetOpticalLinkMethod = getGetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.LinkId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLink")).build();
                 }
             }
         }
         return getGetOpticalLinkMethod;
     }
 
-    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getDeleteOpticalLinkMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalLink", 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> getDeleteOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getDeleteOpticalLinkMethod;
+        if ((getDeleteOpticalLinkMethod = ContextServiceGrpc.getDeleteOpticalLinkMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalLinkMethod = ContextServiceGrpc.getDeleteOpticalLinkMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalLinkMethod = getDeleteOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalLink")).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("DeleteOpticalLink")).build();
+                }
+            }
+        }
+        return getDeleteOpticalLinkMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod;
 
-    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetFiber", requestType = context.ContextOuterClass.FiberId.class, responseType = context.ContextOuterClass.Fiber.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-    public static io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod() {
-        io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
-        if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLinkList", requestType = context.ContextOuterClass.Empty.class, responseType = context.ContextOuterClass.OpticalLinkList.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod;
+        if ((getGetOpticalLinkListMethod = ContextServiceGrpc.getGetOpticalLinkListMethod) == null) {
             synchronized (ContextServiceGrpc.class) {
-                if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
-                    ContextServiceGrpc.getGetFiberMethod = getGetFiberMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetFiber")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.FiberId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Fiber.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetFiber")).build();
+                if ((getGetOpticalLinkListMethod = ContextServiceGrpc.getGetOpticalLinkListMethod) == null) {
+                    ContextServiceGrpc.getGetOpticalLinkListMethod = getGetOpticalLinkListMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLinkList")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLinkList.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLinkList")).build();
                 }
             }
         }
-        return getGetFiberMethod;
+        return getGetOpticalLinkListMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteServiceConfigRule", requestType = context.ContextOuterClass.ServiceConfigRule.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod;
+        if ((getDeleteServiceConfigRuleMethod = ContextServiceGrpc.getDeleteServiceConfigRuleMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteServiceConfigRuleMethod = ContextServiceGrpc.getDeleteServiceConfigRuleMethod) == null) {
+                    ContextServiceGrpc.getDeleteServiceConfigRuleMethod = getDeleteServiceConfigRuleMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteServiceConfigRule")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.ServiceConfigRule.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteServiceConfigRule")).build();
+                }
+            }
+        }
+        return getDeleteServiceConfigRuleMethod;
     }
 
     /**
@@ -1194,12 +1269,30 @@ public final class ContextServiceGrpc {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetOpticalConfigMethod(), responseObserver);
         }
 
+        /**
+         */
+        default void updateOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUpdateOpticalConfigMethod(), responseObserver);
+        }
+
         /**
          */
         default void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectOpticalConfigMethod(), responseObserver);
         }
 
+        /**
+         */
+        default void deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalChannelMethod(), responseObserver);
+        }
+
         /**
          */
         default void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
@@ -1208,14 +1301,26 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        default void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+        default void getOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalLinkMethod(), responseObserver);
         }
 
         /**
          */
-        default void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
-            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetFiberMethod(), responseObserver);
+        default void deleteOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalLinkMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void getOpticalLinkList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalLinkListMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteServiceConfigRuleMethod(), responseObserver);
         }
     }
 
@@ -1553,12 +1658,30 @@ public final class ContextServiceGrpc {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request, responseObserver);
         }
 
+        /**
+         */
+        public void updateOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getUpdateOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
         /**
          */
         public void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request, responseObserver);
         }
 
+        /**
+         */
+        public void deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalChannelMethod(), getCallOptions()), request, responseObserver);
+        }
+
         /**
          */
         public void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
@@ -1567,14 +1690,26 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+        public void getOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request, responseObserver);
         }
 
         /**
          */
-        public void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
-            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request, responseObserver);
+        public void deleteOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalLinkMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void getOpticalLinkList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalLinkListMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteServiceConfigRuleMethod(), getCallOptions()), request, responseObserver);
         }
     }
 
@@ -1901,12 +2036,30 @@ public final class ContextServiceGrpc {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSetOpticalConfigMethod(), getCallOptions(), request);
         }
 
+        /**
+         */
+        public context.ContextOuterClass.OpticalConfigId updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getUpdateOpticalConfigMethod(), getCallOptions(), request);
+        }
+
         /**
          */
         public context.ContextOuterClass.OpticalConfig selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSelectOpticalConfigMethod(), getCallOptions(), request);
         }
 
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalConfigMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalChannelMethod(), getCallOptions(), request);
+        }
+
         /**
          */
         public context.ContextOuterClass.Empty setOpticalLink(context.ContextOuterClass.OpticalLink request) {
@@ -1915,14 +2068,26 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public context.ContextOuterClass.OpticalLink getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public context.ContextOuterClass.OpticalLink getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalLinkMethod(), getCallOptions(), request);
         }
 
         /**
          */
-        public context.ContextOuterClass.Fiber getFiber(context.ContextOuterClass.FiberId request) {
-            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetFiberMethod(), getCallOptions(), request);
+        public context.ContextOuterClass.Empty deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalLinkMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.OpticalLinkList getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalLinkListMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteServiceConfigRuleMethod(), getCallOptions(), request);
         }
     }
 
@@ -2207,12 +2372,30 @@ public final class ContextServiceGrpc {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request);
         }
 
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getUpdateOpticalConfigMethod(), getCallOptions()), request);
+        }
+
         /**
          */
         public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request);
         }
 
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalConfigMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalChannelMethod(), getCallOptions()), request);
+        }
+
         /**
          */
         public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
@@ -2221,14 +2404,26 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request);
         }
 
         /**
          */
-        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request);
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalLinkMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalLinkListMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteServiceConfigRuleMethod(), getCallOptions()), request);
         }
     }
 
@@ -2334,13 +2529,23 @@ public final class ContextServiceGrpc {
 
     private static final int METHODID_SET_OPTICAL_CONFIG = 50;
 
-    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+    private static final int METHODID_UPDATE_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 52;
+
+    private static final int METHODID_DELETE_OPTICAL_CONFIG = 53;
+
+    private static final int METHODID_DELETE_OPTICAL_CHANNEL = 54;
 
-    private static final int METHODID_SET_OPTICAL_LINK = 52;
+    private static final int METHODID_SET_OPTICAL_LINK = 55;
 
-    private static final int METHODID_GET_OPTICAL_LINK = 53;
+    private static final int METHODID_GET_OPTICAL_LINK = 56;
 
-    private static final int METHODID_GET_FIBER = 54;
+    private static final int METHODID_DELETE_OPTICAL_LINK = 57;
+
+    private static final int METHODID_GET_OPTICAL_LINK_LIST = 58;
+
+    private static final int METHODID_DELETE_SERVICE_CONFIG_RULE = 59;
 
     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> {
 
@@ -2510,17 +2715,32 @@ public final class ContextServiceGrpc {
                 case METHODID_SET_OPTICAL_CONFIG:
                     serviceImpl.setOpticalConfig((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver);
                     break;
+                case METHODID_UPDATE_OPTICAL_CONFIG:
+                    serviceImpl.updateOpticalConfig((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver);
+                    break;
                 case METHODID_SELECT_OPTICAL_CONFIG:
                     serviceImpl.selectOpticalConfig((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver);
                     break;
+                case METHODID_DELETE_OPTICAL_CONFIG:
+                    serviceImpl.deleteOpticalConfig((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
+                case METHODID_DELETE_OPTICAL_CHANNEL:
+                    serviceImpl.deleteOpticalChannel((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
                 case METHODID_SET_OPTICAL_LINK:
                     serviceImpl.setOpticalLink((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
                     break;
                 case METHODID_GET_OPTICAL_LINK:
-                    serviceImpl.getOpticalLink((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver);
+                    serviceImpl.getOpticalLink((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver);
+                    break;
+                case METHODID_DELETE_OPTICAL_LINK:
+                    serviceImpl.deleteOpticalLink((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
+                case METHODID_GET_OPTICAL_LINK_LIST:
+                    serviceImpl.getOpticalLinkList((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList>) responseObserver);
                     break;
-                case METHODID_GET_FIBER:
-                    serviceImpl.getFiber((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver);
+                case METHODID_DELETE_SERVICE_CONFIG_RULE:
+                    serviceImpl.deleteServiceConfigRule((context.ContextOuterClass.ServiceConfigRule) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
                     break;
                 default:
                     throw new AssertionError();
@@ -2538,7 +2758,7 @@ public final class ContextServiceGrpc {
     }
 
     public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
-        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getListContextIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(service, METHODID_LIST_CONTEXT_IDS))).addMethod(getListContextsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(service, METHODID_LIST_CONTEXTS))).addMethod(getGetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(service, METHODID_GET_CONTEXT))).addMethod(getSetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(service, METHODID_SET_CONTEXT))).addMethod(getRemoveContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONTEXT))).addMethod(getGetContextEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(service, METHODID_GET_CONTEXT_EVENTS))).addMethod(getListTopologyIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(service, METHODID_LIST_TOPOLOGY_IDS))).addMethod(getListTopologiesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(service, METHODID_LIST_TOPOLOGIES))).addMethod(getGetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(service, METHODID_GET_TOPOLOGY))).addMethod(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(service, METHODID_GET_TOPOLOGY_DETAILS))).addMethod(getSetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(service, METHODID_SET_TOPOLOGY))).addMethod(getRemoveTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_TOPOLOGY))).addMethod(getGetTopologyEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(service, METHODID_GET_TOPOLOGY_EVENTS))).addMethod(getListDeviceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(service, METHODID_LIST_DEVICE_IDS))).addMethod(getListDevicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(service, METHODID_LIST_DEVICES))).addMethod(getGetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(service, METHODID_GET_DEVICE))).addMethod(getSetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_SET_DEVICE))).addMethod(getRemoveDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_DEVICE))).addMethod(getGetDeviceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(service, METHODID_GET_DEVICE_EVENTS))).addMethod(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(service, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(service, METHODID_LIST_END_POINT_NAMES))).addMethod(getListLinkIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(service, METHODID_LIST_LINK_IDS))).addMethod(getListLinksMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(service, METHODID_LIST_LINKS))).addMethod(getGetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(service, METHODID_GET_LINK))).addMethod(getSetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(service, METHODID_SET_LINK))).addMethod(getRemoveLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_LINK))).addMethod(getGetLinkEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(service, METHODID_GET_LINK_EVENTS))).addMethod(getListServiceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(service, METHODID_LIST_SERVICE_IDS))).addMethod(getListServicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(service, METHODID_LIST_SERVICES))).addMethod(getGetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(service, METHODID_GET_SERVICE))).addMethod(getSetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_SET_SERVICE))).addMethod(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_UNSET_SERVICE))).addMethod(getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SERVICE))).addMethod(getGetServiceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(service, METHODID_GET_SERVICE_EVENTS))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(service, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(service, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(service, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(service, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(service, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(service, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(service, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(service, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(service, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(service, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(service, METHODID_GET_CONNECTION_EVENTS))).addMethod(getGetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(service, METHODID_GET_OPTICAL_CONFIG))).addMethod(getSetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_SET_OPTICAL_CONFIG))).addMethod(getSelectOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(service, METHODID_SELECT_OPTICAL_CONFIG))).addMethod(getSetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(service, METHODID_SET_OPTICAL_LINK))).addMethod(getGetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(service, METHODID_GET_OPTICAL_LINK))).addMethod(getGetFiberMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(service, METHODID_GET_FIBER))).build();
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getListContextIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(service, METHODID_LIST_CONTEXT_IDS))).addMethod(getListContextsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(service, METHODID_LIST_CONTEXTS))).addMethod(getGetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(service, METHODID_GET_CONTEXT))).addMethod(getSetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(service, METHODID_SET_CONTEXT))).addMethod(getRemoveContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONTEXT))).addMethod(getGetContextEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(service, METHODID_GET_CONTEXT_EVENTS))).addMethod(getListTopologyIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(service, METHODID_LIST_TOPOLOGY_IDS))).addMethod(getListTopologiesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(service, METHODID_LIST_TOPOLOGIES))).addMethod(getGetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(service, METHODID_GET_TOPOLOGY))).addMethod(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(service, METHODID_GET_TOPOLOGY_DETAILS))).addMethod(getSetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(service, METHODID_SET_TOPOLOGY))).addMethod(getRemoveTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_TOPOLOGY))).addMethod(getGetTopologyEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(service, METHODID_GET_TOPOLOGY_EVENTS))).addMethod(getListDeviceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(service, METHODID_LIST_DEVICE_IDS))).addMethod(getListDevicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(service, METHODID_LIST_DEVICES))).addMethod(getGetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(service, METHODID_GET_DEVICE))).addMethod(getSetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_SET_DEVICE))).addMethod(getRemoveDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_DEVICE))).addMethod(getGetDeviceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(service, METHODID_GET_DEVICE_EVENTS))).addMethod(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(service, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(service, METHODID_LIST_END_POINT_NAMES))).addMethod(getListLinkIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(service, METHODID_LIST_LINK_IDS))).addMethod(getListLinksMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(service, METHODID_LIST_LINKS))).addMethod(getGetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(service, METHODID_GET_LINK))).addMethod(getSetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(service, METHODID_SET_LINK))).addMethod(getRemoveLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_LINK))).addMethod(getGetLinkEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(service, METHODID_GET_LINK_EVENTS))).addMethod(getListServiceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(service, METHODID_LIST_SERVICE_IDS))).addMethod(getListServicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(service, METHODID_LIST_SERVICES))).addMethod(getGetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(service, METHODID_GET_SERVICE))).addMethod(getSetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_SET_SERVICE))).addMethod(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_UNSET_SERVICE))).addMethod(getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SERVICE))).addMethod(getGetServiceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(service, METHODID_GET_SERVICE_EVENTS))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(service, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(service, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(service, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(service, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(service, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(service, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(service, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(service, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(service, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(service, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(service, METHODID_GET_CONNECTION_EVENTS))).addMethod(getGetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(service, METHODID_GET_OPTICAL_CONFIG))).addMethod(getSetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_SET_OPTICAL_CONFIG))).addMethod(getUpdateOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_UPDATE_OPTICAL_CONFIG))).addMethod(getSelectOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(service, METHODID_SELECT_OPTICAL_CONFIG))).addMethod(getDeleteOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_CONFIG))).addMethod(getDeleteOpticalChannelMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_CHANNEL))).addMethod(getSetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(service, METHODID_SET_OPTICAL_LINK))).addMethod(getGetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>(service, METHODID_GET_OPTICAL_LINK))).addMethod(getDeleteOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_LINK))).addMethod(getGetOpticalLinkListMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>(service, METHODID_GET_OPTICAL_LINK_LIST))).addMethod(getDeleteServiceConfigRuleMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>(service, METHODID_DELETE_SERVICE_CONFIG_RULE))).build();
     }
 
     private static abstract class ContextServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
@@ -2585,7 +2805,7 @@ public final class ContextServiceGrpc {
             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(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).addMethod(getGetOpticalConfigMethod()).addMethod(getSetOpticalConfigMethod()).addMethod(getSelectOpticalConfigMethod()).addMethod(getSetOpticalLinkMethod()).addMethod(getGetOpticalLinkMethod()).addMethod(getGetFiberMethod()).build();
+                    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(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).addMethod(getGetOpticalConfigMethod()).addMethod(getSetOpticalConfigMethod()).addMethod(getUpdateOpticalConfigMethod()).addMethod(getSelectOpticalConfigMethod()).addMethod(getDeleteOpticalConfigMethod()).addMethod(getDeleteOpticalChannelMethod()).addMethod(getSetOpticalLinkMethod()).addMethod(getGetOpticalLinkMethod()).addMethod(getDeleteOpticalLinkMethod()).addMethod(getGetOpticalLinkListMethod()).addMethod(getDeleteServiceConfigRuleMethod()).build();
                 }
             }
         }
diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
index c6dbb1e92554dea8ee8d25b01bf87dd2cfa32551..b97952a61921e3eb7429e96c36b7a294d921d221 100644
--- a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -216,20 +216,40 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalConfig);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::updateOpticalConfig);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::selectOpticalConfig);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalConfig);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalChannel);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalLink);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalLink);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getFiber);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalLink);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalLinkList);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteServiceConfigRule);
         }
 
         public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
@@ -456,19 +476,39 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -502,7 +542,7 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
         @java.lang.Override
         public 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.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, 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.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, 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.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_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))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, compression))).addMethod(context.ContextServiceGrpc.getListConnectionIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(this, METHODID_LIST_CONNECTION_IDS, compression))).addMethod(context.ContextServiceGrpc.getListConnectionsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(this, METHODID_LIST_CONNECTIONS, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(this, METHODID_GET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getSetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(this, METHODID_SET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getRemoveConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(this, METHODID_GET_CONNECTION_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSelectOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetFiberMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(this, METHODID_GET_FIBER, compression))).build();
+            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.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, 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.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, 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.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_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))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, compression))).addMethod(context.ContextServiceGrpc.getListConnectionIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(this, METHODID_LIST_CONNECTION_IDS, compression))).addMethod(context.ContextServiceGrpc.getListConnectionsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(this, METHODID_LIST_CONNECTIONS, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(this, METHODID_GET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getSetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(this, METHODID_SET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getRemoveConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(this, METHODID_GET_CONNECTION_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getUpdateOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_UPDATE_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSelectOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalChannelMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_CHANNEL, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkListMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>(this, METHODID_GET_OPTICAL_LINK_LIST, compression))).addMethod(context.ContextServiceGrpc.getDeleteServiceConfigRuleMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>(this, METHODID_DELETE_SERVICE_CONFIG_RULE, compression))).build();
         }
     }
 
@@ -608,13 +648,23 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
     private static final int METHODID_SET_OPTICAL_CONFIG = 50;
 
-    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+    private static final int METHODID_UPDATE_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 52;
+
+    private static final int METHODID_DELETE_OPTICAL_CONFIG = 53;
 
-    private static final int METHODID_SET_OPTICAL_LINK = 52;
+    private static final int METHODID_DELETE_OPTICAL_CHANNEL = 54;
 
-    private static final int METHODID_GET_OPTICAL_LINK = 53;
+    private static final int METHODID_SET_OPTICAL_LINK = 55;
 
-    private static final int METHODID_GET_FIBER = 54;
+    private static final int METHODID_GET_OPTICAL_LINK = 56;
+
+    private static final int METHODID_DELETE_OPTICAL_LINK = 57;
+
+    private static final int METHODID_GET_OPTICAL_LINK_LIST = 58;
+
+    private static final int METHODID_DELETE_SERVICE_CONFIG_RULE = 59;
 
     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> {
 
@@ -787,17 +837,32 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
                 case METHODID_SET_OPTICAL_CONFIG:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver, compression, serviceImpl::setOpticalConfig);
                     break;
+                case METHODID_UPDATE_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver, compression, serviceImpl::updateOpticalConfig);
+                    break;
                 case METHODID_SELECT_OPTICAL_CONFIG:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver, compression, serviceImpl::selectOpticalConfig);
                     break;
+                case METHODID_DELETE_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalConfig);
+                    break;
+                case METHODID_DELETE_OPTICAL_CHANNEL:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalChannel);
+                    break;
                 case METHODID_SET_OPTICAL_LINK:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::setOpticalLink);
                     break;
                 case METHODID_GET_OPTICAL_LINK:
-                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver, compression, serviceImpl::getOpticalLink);
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver, compression, serviceImpl::getOpticalLink);
+                    break;
+                case METHODID_DELETE_OPTICAL_LINK:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalLink);
+                    break;
+                case METHODID_GET_OPTICAL_LINK_LIST:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList>) responseObserver, compression, serviceImpl::getOpticalLinkList);
                     break;
-                case METHODID_GET_FIBER:
-                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver, compression, serviceImpl::getFiber);
+                case METHODID_DELETE_SERVICE_CONFIG_RULE:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.ServiceConfigRule) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteServiceConfigRule);
                     break;
                 default:
                     throw new java.lang.AssertionError();
diff --git a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
index 9621efb4beed8543be18a4bd369de73f52b2e076..2a8a6259344e802f5c2f23d0a475ed13ca72f682 100644
--- a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
+++ b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -95,6 +95,38 @@ public final class KpiSampleTypes {
          * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS = 701;</code>
          */
         KPISAMPLETYPE_SERVICE_LATENCY_MS(701),
+        /**
+         * <pre>
+         * output KPIs
+         * </pre>
+         *
+         * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT = 1101;</code>
+         */
+        KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT(1101),
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT = 1102;</code>
+         */
+        KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT(1102),
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT = 1103;</code>
+         */
+        KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT(1103),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT = 1201;</code>
+         */
+        KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT(1201),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT = 1202;</code>
+         */
+        KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT(1202),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT = 1203;</code>
+         */
+        KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT(1203),
+        /**
+         * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT = 1701;</code>
+         */
+        KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT(1701),
         UNRECOGNIZED(-1);
 
         /**
@@ -190,6 +222,45 @@ public final class KpiSampleTypes {
          */
         public static final int KPISAMPLETYPE_SERVICE_LATENCY_MS_VALUE = 701;
 
+        /**
+         * <pre>
+         * output KPIs
+         * </pre>
+         *
+         * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT = 1101;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT_VALUE = 1101;
+
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT = 1102;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT_VALUE = 1102;
+
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT = 1103;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT_VALUE = 1103;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT = 1201;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT_VALUE = 1201;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT = 1202;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT_VALUE = 1202;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT = 1203;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT_VALUE = 1203;
+
+        /**
+         * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT = 1701;</code>
+         */
+        public static final int KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT_VALUE = 1701;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -247,6 +318,20 @@ public final class KpiSampleTypes {
                     return KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO;
                 case 701:
                     return KPISAMPLETYPE_SERVICE_LATENCY_MS;
+                case 1101:
+                    return KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT;
+                case 1102:
+                    return KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT;
+                case 1103:
+                    return KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT;
+                case 1201:
+                    return KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT;
+                case 1202:
+                    return KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT;
+                case 1203:
+                    return KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT;
+                case 1701:
+                    return KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT;
                 default:
                     return null;
             }
@@ -304,7 +389,7 @@ public final class KpiSampleTypes {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" + "es*\260\005\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" + "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" + "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" + "\020f\022!\n\035KPISAMPLETYPE_PACKETS_DROPPED\020g\022$\n" + "\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001\022!\n\034K" + "PISAMPLETYPE_BYTES_RECEIVED\020\312\001\022 \n\033KPISAM" + "PLETYPE_BYTES_DROPPED\020\313\001\022+\n&KPISAMPLETYP" + "E_LINK_TOTAL_CAPACITY_GBPS\020\255\002\022*\n%KPISAMP" + "LETYPE_LINK_USED_CAPACITY_GBPS\020\256\002\022 \n\033KPI" + "SAMPLETYPE_ML_CONFIDENCE\020\221\003\022*\n%KPISAMPLE" + "TYPE_OPTICAL_SECURITY_STATUS\020\365\003\022)\n$KPISA" + "MPLETYPE_L3_UNIQUE_ATTACK_CONNS\020\331\004\022*\n%KP" + "ISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS\020\332\004\022&" + "\n!KPISAMPLETYPE_L3_UNIQUE_ATTACKERS\020\333\004\0220" + "\n+KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CL" + "IENTS\020\334\004\022,\n\'KPISAMPLETYPE_L3_SECURITY_ST" + "ATUS_CRYPTO\020\335\004\022%\n KPISAMPLETYPE_SERVICE_" + "LATENCY_MS\020\275\005b\006proto3" };
+        java.lang.String[] descriptorData = { "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" + "es*\200\010\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" + "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" + "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" + "\020f\022!\n\035KPISAMPLETYPE_PACKETS_DROPPED\020g\022$\n" + "\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001\022!\n\034K" + "PISAMPLETYPE_BYTES_RECEIVED\020\312\001\022 \n\033KPISAM" + "PLETYPE_BYTES_DROPPED\020\313\001\022+\n&KPISAMPLETYP" + "E_LINK_TOTAL_CAPACITY_GBPS\020\255\002\022*\n%KPISAMP" + "LETYPE_LINK_USED_CAPACITY_GBPS\020\256\002\022 \n\033KPI" + "SAMPLETYPE_ML_CONFIDENCE\020\221\003\022*\n%KPISAMPLE" + "TYPE_OPTICAL_SECURITY_STATUS\020\365\003\022)\n$KPISA" + "MPLETYPE_L3_UNIQUE_ATTACK_CONNS\020\331\004\022*\n%KP" + "ISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS\020\332\004\022&" + "\n!KPISAMPLETYPE_L3_UNIQUE_ATTACKERS\020\333\004\0220" + "\n+KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CL" + "IENTS\020\334\004\022,\n\'KPISAMPLETYPE_L3_SECURITY_ST" + "ATUS_CRYPTO\020\335\004\022%\n KPISAMPLETYPE_SERVICE_" + "LATENCY_MS\020\275\005\0221\n,KPISAMPLETYPE_PACKETS_T" + "RANSMITTED_AGG_OUTPUT\020\315\010\022.\n)KPISAMPLETYP" + "E_PACKETS_RECEIVED_AGG_OUTPUT\020\316\010\022-\n(KPIS" + "AMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT\020\317\010\022" + "/\n*KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_O" + "UTPUT\020\261\t\022,\n\'KPISAMPLETYPE_BYTES_RECEIVED" + "_AGG_OUTPUT\020\262\t\022+\n&KPISAMPLETYPE_BYTES_DR" + "OPPED_AGG_OUTPUT\020\263\t\0220\n+KPISAMPLETYPE_SER" + "VICE_LATENCY_MS_AGG_OUTPUT\020\245\rb\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
     }
     // @@protoc_insertion_point(outer_class_scope)
diff --git a/src/ztp/target/generated-sources/grpc/acl/Acl.java b/src/ztp/target/generated-sources/grpc/acl/Acl.java
index f1895fa7206642f8f8d6b63f5d2635fb68816f89..037bd385819e8b9db0d80186bf4e210d39ea8bed 100644
--- a/src/ztp/target/generated-sources/grpc/acl/Acl.java
+++ b/src/ztp/target/generated-sources/grpc/acl/Acl.java
@@ -459,6 +459,18 @@ public final class Acl {
          * @return The endMplsLabel.
          */
         int getEndMplsLabel();
+
+        /**
+         * <code>string tcp_flags = 9;</code>
+         * @return The tcpFlags.
+         */
+        java.lang.String getTcpFlags();
+
+        /**
+         * <code>string tcp_flags = 9;</code>
+         * @return The bytes for tcpFlags.
+         */
+        com.google.protobuf.ByteString getTcpFlagsBytes();
     }
 
     /**
@@ -477,6 +489,7 @@ public final class Acl {
         private AclMatch() {
             srcAddress_ = "";
             dstAddress_ = "";
+            tcpFlags_ = "";
         }
 
         @java.lang.Override
@@ -485,86 +498,6 @@ public final class Acl {
             return new AclMatch();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AclMatch(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:
-                            {
-                                dscp_ = input.readUInt32();
-                                break;
-                            }
-                        case 16:
-                            {
-                                protocol_ = input.readUInt32();
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                srcAddress_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                dstAddress_ = s;
-                                break;
-                            }
-                        case 40:
-                            {
-                                srcPort_ = input.readUInt32();
-                                break;
-                            }
-                        case 48:
-                            {
-                                dstPort_ = input.readUInt32();
-                                break;
-                            }
-                        case 56:
-                            {
-                                startMplsLabel_ = input.readUInt32();
-                                break;
-                            }
-                        case 64:
-                            {
-                                endMplsLabel_ = 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 acl.Acl.internal_static_acl_AclMatch_descriptor;
         }
@@ -576,7 +509,7 @@ public final class Acl {
 
         public static final int DSCP_FIELD_NUMBER = 1;
 
-        private int dscp_;
+        private int dscp_ = 0;
 
         /**
          * <code>uint32 dscp = 1;</code>
@@ -589,7 +522,7 @@ public final class Acl {
 
         public static final int PROTOCOL_FIELD_NUMBER = 2;
 
-        private int protocol_;
+        private int protocol_ = 0;
 
         /**
          * <code>uint32 protocol = 2;</code>
@@ -602,7 +535,8 @@ public final class Acl {
 
         public static final int SRC_ADDRESS_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object srcAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object srcAddress_ = "";
 
         /**
          * <code>string src_address = 3;</code>
@@ -639,7 +573,8 @@ public final class Acl {
 
         public static final int DST_ADDRESS_FIELD_NUMBER = 4;
 
-        private volatile java.lang.Object dstAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object dstAddress_ = "";
 
         /**
          * <code>string dst_address = 4;</code>
@@ -676,7 +611,7 @@ public final class Acl {
 
         public static final int SRC_PORT_FIELD_NUMBER = 5;
 
-        private int srcPort_;
+        private int srcPort_ = 0;
 
         /**
          * <code>uint32 src_port = 5;</code>
@@ -689,7 +624,7 @@ public final class Acl {
 
         public static final int DST_PORT_FIELD_NUMBER = 6;
 
-        private int dstPort_;
+        private int dstPort_ = 0;
 
         /**
          * <code>uint32 dst_port = 6;</code>
@@ -702,7 +637,7 @@ public final class Acl {
 
         public static final int START_MPLS_LABEL_FIELD_NUMBER = 7;
 
-        private int startMplsLabel_;
+        private int startMplsLabel_ = 0;
 
         /**
          * <code>uint32 start_mpls_label = 7;</code>
@@ -715,7 +650,7 @@ public final class Acl {
 
         public static final int END_MPLS_LABEL_FIELD_NUMBER = 8;
 
-        private int endMplsLabel_;
+        private int endMplsLabel_ = 0;
 
         /**
          * <code>uint32 end_mpls_label = 8;</code>
@@ -726,6 +661,44 @@ public final class Acl {
             return endMplsLabel_;
         }
 
+        public static final int TCP_FLAGS_FIELD_NUMBER = 9;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object tcpFlags_ = "";
+
+        /**
+         * <code>string tcp_flags = 9;</code>
+         * @return The tcpFlags.
+         */
+        @java.lang.Override
+        public java.lang.String getTcpFlags() {
+            java.lang.Object ref = tcpFlags_;
+            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();
+                tcpFlags_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string tcp_flags = 9;</code>
+         * @return The bytes for tcpFlags.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getTcpFlagsBytes() {
+            java.lang.Object ref = tcpFlags_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                tcpFlags_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -747,10 +720,10 @@ public final class Acl {
             if (protocol_ != 0) {
                 output.writeUInt32(2, protocol_);
             }
-            if (!getSrcAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, srcAddress_);
             }
-            if (!getDstAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 4, dstAddress_);
             }
             if (srcPort_ != 0) {
@@ -765,7 +738,10 @@ public final class Acl {
             if (endMplsLabel_ != 0) {
                 output.writeUInt32(8, endMplsLabel_);
             }
-            unknownFields.writeTo(output);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tcpFlags_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 9, tcpFlags_);
+            }
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -780,10 +756,10 @@ public final class Acl {
             if (protocol_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, protocol_);
             }
-            if (!getSrcAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, srcAddress_);
             }
-            if (!getDstAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, dstAddress_);
             }
             if (srcPort_ != 0) {
@@ -798,7 +774,10 @@ public final class Acl {
             if (endMplsLabel_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(8, endMplsLabel_);
             }
-            size += unknownFields.getSerializedSize();
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tcpFlags_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, tcpFlags_);
+            }
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -828,7 +807,9 @@ public final class Acl {
                 return false;
             if (getEndMplsLabel() != other.getEndMplsLabel())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getTcpFlags().equals(other.getTcpFlags()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -856,7 +837,9 @@ public final class Acl {
             hash = (53 * hash) + getStartMplsLabel();
             hash = (37 * hash) + END_MPLS_LABEL_FIELD_NUMBER;
             hash = (53 * hash) + getEndMplsLabel();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+            hash = (53 * hash) + getTcpFlags().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -950,22 +933,16 @@ public final class Acl {
 
             // Construct using acl.Acl.AclMatch.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();
+                bitField0_ = 0;
                 dscp_ = 0;
                 protocol_ = 0;
                 srcAddress_ = "";
@@ -974,6 +951,7 @@ public final class Acl {
                 dstPort_ = 0;
                 startMplsLabel_ = 0;
                 endMplsLabel_ = 0;
+                tcpFlags_ = "";
                 return this;
             }
 
@@ -999,46 +977,42 @@ public final class Acl {
             @java.lang.Override
             public acl.Acl.AclMatch buildPartial() {
                 acl.Acl.AclMatch result = new acl.Acl.AclMatch(this);
-                result.dscp_ = dscp_;
-                result.protocol_ = protocol_;
-                result.srcAddress_ = srcAddress_;
-                result.dstAddress_ = dstAddress_;
-                result.srcPort_ = srcPort_;
-                result.dstPort_ = dstPort_;
-                result.startMplsLabel_ = startMplsLabel_;
-                result.endMplsLabel_ = endMplsLabel_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(acl.Acl.AclMatch result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.dscp_ = dscp_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.protocol_ = protocol_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.srcAddress_ = srcAddress_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.dstAddress_ = dstAddress_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.srcPort_ = srcPort_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.dstPort_ = dstPort_;
+                }
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.startMplsLabel_ = startMplsLabel_;
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.endMplsLabel_ = endMplsLabel_;
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.tcpFlags_ = tcpFlags_;
+                }
             }
 
             @java.lang.Override
@@ -1062,10 +1036,12 @@ public final class Acl {
                 }
                 if (!other.getSrcAddress().isEmpty()) {
                     srcAddress_ = other.srcAddress_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (!other.getDstAddress().isEmpty()) {
                     dstAddress_ = other.dstAddress_;
+                    bitField0_ |= 0x00000008;
                     onChanged();
                 }
                 if (other.getSrcPort() != 0) {
@@ -1080,7 +1056,12 @@ public final class Acl {
                 if (other.getEndMplsLabel() != 0) {
                     setEndMplsLabel(other.getEndMplsLabel());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                if (!other.getTcpFlags().isEmpty()) {
+                    tcpFlags_ = other.tcpFlags_;
+                    bitField0_ |= 0x00000100;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -1092,20 +1073,103 @@ public final class Acl {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                acl.Acl.AclMatch parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    dscp_ = input.readUInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 16:
+                                {
+                                    protocol_ = input.readUInt32();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 26:
+                                {
+                                    srcAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    dstAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 40:
+                                {
+                                    srcPort_ = input.readUInt32();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            case 48:
+                                {
+                                    dstPort_ = input.readUInt32();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 48
+                            case 56:
+                                {
+                                    startMplsLabel_ = input.readUInt32();
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 56
+                            case 64:
+                                {
+                                    endMplsLabel_ = input.readUInt32();
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 64
+                            case 74:
+                                {
+                                    tcpFlags_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (acl.Acl.AclMatch) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int dscp_;
 
             /**
@@ -1124,6 +1188,7 @@ public final class Acl {
              */
             public Builder setDscp(int value) {
                 dscp_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -1133,6 +1198,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearDscp() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 dscp_ = 0;
                 onChanged();
                 return this;
@@ -1156,6 +1222,7 @@ public final class Acl {
              */
             public Builder setProtocol(int value) {
                 protocol_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -1165,6 +1232,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearProtocol() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 protocol_ = 0;
                 onChanged();
                 return this;
@@ -1213,6 +1281,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 srcAddress_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -1223,6 +1292,7 @@ public final class Acl {
              */
             public Builder clearSrcAddress() {
                 srcAddress_ = getDefaultInstance().getSrcAddress();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -1238,6 +1308,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 srcAddress_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -1285,6 +1356,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 dstAddress_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -1295,6 +1367,7 @@ public final class Acl {
              */
             public Builder clearDstAddress() {
                 dstAddress_ = getDefaultInstance().getDstAddress();
+                bitField0_ = (bitField0_ & ~0x00000008);
                 onChanged();
                 return this;
             }
@@ -1310,6 +1383,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 dstAddress_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -1332,6 +1406,7 @@ public final class Acl {
              */
             public Builder setSrcPort(int value) {
                 srcPort_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -1341,6 +1416,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearSrcPort() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 srcPort_ = 0;
                 onChanged();
                 return this;
@@ -1364,6 +1440,7 @@ public final class Acl {
              */
             public Builder setDstPort(int value) {
                 dstPort_ = value;
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return this;
             }
@@ -1373,6 +1450,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearDstPort() {
+                bitField0_ = (bitField0_ & ~0x00000020);
                 dstPort_ = 0;
                 onChanged();
                 return this;
@@ -1396,6 +1474,7 @@ public final class Acl {
              */
             public Builder setStartMplsLabel(int value) {
                 startMplsLabel_ = value;
+                bitField0_ |= 0x00000040;
                 onChanged();
                 return this;
             }
@@ -1405,6 +1484,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearStartMplsLabel() {
+                bitField0_ = (bitField0_ & ~0x00000040);
                 startMplsLabel_ = 0;
                 onChanged();
                 return this;
@@ -1428,6 +1508,7 @@ public final class Acl {
              */
             public Builder setEndMplsLabel(int value) {
                 endMplsLabel_ = value;
+                bitField0_ |= 0x00000080;
                 onChanged();
                 return this;
             }
@@ -1437,11 +1518,87 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearEndMplsLabel() {
+                bitField0_ = (bitField0_ & ~0x00000080);
                 endMplsLabel_ = 0;
                 onChanged();
                 return this;
             }
 
+            private java.lang.Object tcpFlags_ = "";
+
+            /**
+             * <code>string tcp_flags = 9;</code>
+             * @return The tcpFlags.
+             */
+            public java.lang.String getTcpFlags() {
+                java.lang.Object ref = tcpFlags_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    tcpFlags_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string tcp_flags = 9;</code>
+             * @return The bytes for tcpFlags.
+             */
+            public com.google.protobuf.ByteString getTcpFlagsBytes() {
+                java.lang.Object ref = tcpFlags_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    tcpFlags_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string tcp_flags = 9;</code>
+             * @param value The tcpFlags to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTcpFlags(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                tcpFlags_ = value;
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string tcp_flags = 9;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearTcpFlags() {
+                tcpFlags_ = getDefaultInstance().getTcpFlags();
+                bitField0_ = (bitField0_ & ~0x00000100);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string tcp_flags = 9;</code>
+             * @param value The bytes for tcpFlags to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTcpFlagsBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                tcpFlags_ = value;
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return this;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -1469,7 +1626,17 @@ public final class Acl {
 
             @java.lang.Override
             public AclMatch parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AclMatch(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -1540,56 +1707,6 @@ public final class Acl {
             return new AclAction();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AclAction(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();
-                                forwardAction_ = rawValue;
-                                break;
-                            }
-                        case 16:
-                            {
-                                int rawValue = input.readEnum();
-                                logAction_ = 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 acl.Acl.internal_static_acl_AclAction_descriptor;
         }
@@ -1601,7 +1718,7 @@ public final class Acl {
 
         public static final int FORWARD_ACTION_FIELD_NUMBER = 1;
 
-        private int forwardAction_;
+        private int forwardAction_ = 0;
 
         /**
          * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
@@ -1618,14 +1735,13 @@ public final class Acl {
          */
         @java.lang.Override
         public acl.Acl.AclForwardActionEnum getForwardAction() {
-            @SuppressWarnings("deprecation")
-            acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+            acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.forNumber(forwardAction_);
             return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
         }
 
         public static final int LOG_ACTION_FIELD_NUMBER = 2;
 
-        private int logAction_;
+        private int logAction_ = 0;
 
         /**
          * <code>.acl.AclLogActionEnum log_action = 2;</code>
@@ -1642,8 +1758,7 @@ public final class Acl {
          */
         @java.lang.Override
         public acl.Acl.AclLogActionEnum getLogAction() {
-            @SuppressWarnings("deprecation")
-            acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+            acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.forNumber(logAction_);
             return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
         }
 
@@ -1668,7 +1783,7 @@ public final class Acl {
             if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
                 output.writeEnum(2, logAction_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -1683,7 +1798,7 @@ public final class Acl {
             if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, logAction_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -1701,7 +1816,7 @@ public final class Acl {
                 return false;
             if (logAction_ != other.logAction_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -1717,7 +1832,7 @@ public final class Acl {
             hash = (53 * hash) + forwardAction_;
             hash = (37 * hash) + LOG_ACTION_FIELD_NUMBER;
             hash = (53 * hash) + logAction_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -1811,22 +1926,16 @@ public final class Acl {
 
             // Construct using acl.Acl.AclAction.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();
+                bitField0_ = 0;
                 forwardAction_ = 0;
                 logAction_ = 0;
                 return this;
@@ -1854,40 +1963,21 @@ public final class Acl {
             @java.lang.Override
             public acl.Acl.AclAction buildPartial() {
                 acl.Acl.AclAction result = new acl.Acl.AclAction(this);
-                result.forwardAction_ = forwardAction_;
-                result.logAction_ = logAction_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(acl.Acl.AclAction result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.forwardAction_ = forwardAction_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.logAction_ = logAction_;
+                }
             }
 
             @java.lang.Override
@@ -1909,7 +1999,7 @@ public final class Acl {
                 if (other.logAction_ != 0) {
                     setLogActionValue(other.getLogActionValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -1921,20 +2011,54 @@ public final class Acl {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                acl.Acl.AclAction parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    forwardAction_ = input.readEnum();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 16:
+                                {
+                                    logAction_ = input.readEnum();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (acl.Acl.AclAction) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int forwardAction_ = 0;
 
             /**
@@ -1953,6 +2077,7 @@ public final class Acl {
              */
             public Builder setForwardActionValue(int value) {
                 forwardAction_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -1963,8 +2088,7 @@ public final class Acl {
              */
             @java.lang.Override
             public acl.Acl.AclForwardActionEnum getForwardAction() {
-                @SuppressWarnings("deprecation")
-                acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+                acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.forNumber(forwardAction_);
                 return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
             }
 
@@ -1977,6 +2101,7 @@ public final class Acl {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000001;
                 forwardAction_ = value.getNumber();
                 onChanged();
                 return this;
@@ -1987,6 +2112,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearForwardAction() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 forwardAction_ = 0;
                 onChanged();
                 return this;
@@ -2010,6 +2136,7 @@ public final class Acl {
              */
             public Builder setLogActionValue(int value) {
                 logAction_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -2020,8 +2147,7 @@ public final class Acl {
              */
             @java.lang.Override
             public acl.Acl.AclLogActionEnum getLogAction() {
-                @SuppressWarnings("deprecation")
-                acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+                acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.forNumber(logAction_);
                 return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
             }
 
@@ -2034,6 +2160,7 @@ public final class Acl {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000002;
                 logAction_ = value.getNumber();
                 onChanged();
                 return this;
@@ -2044,6 +2171,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearLogAction() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 logAction_ = 0;
                 onChanged();
                 return this;
@@ -2076,7 +2204,17 @@ public final class Acl {
 
             @java.lang.Override
             public AclAction parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AclAction(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -2174,81 +2312,6 @@ public final class Acl {
             return new AclEntry();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AclEntry(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:
-                            {
-                                sequenceId_ = input.readUInt32();
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                description_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                acl.Acl.AclMatch.Builder subBuilder = null;
-                                if (match_ != null) {
-                                    subBuilder = match_.toBuilder();
-                                }
-                                match_ = input.readMessage(acl.Acl.AclMatch.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(match_);
-                                    match_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 34:
-                            {
-                                acl.Acl.AclAction.Builder subBuilder = null;
-                                if (action_ != null) {
-                                    subBuilder = action_.toBuilder();
-                                }
-                                action_ = input.readMessage(acl.Acl.AclAction.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(action_);
-                                    action_ = 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 acl.Acl.internal_static_acl_AclEntry_descriptor;
         }
@@ -2260,7 +2323,7 @@ public final class Acl {
 
         public static final int SEQUENCE_ID_FIELD_NUMBER = 1;
 
-        private int sequenceId_;
+        private int sequenceId_ = 0;
 
         /**
          * <code>uint32 sequence_id = 1;</code>
@@ -2273,7 +2336,8 @@ public final class Acl {
 
         public static final int DESCRIPTION_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object description_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object description_ = "";
 
         /**
          * <code>string description = 2;</code>
@@ -2335,7 +2399,7 @@ public final class Acl {
          */
         @java.lang.Override
         public acl.Acl.AclMatchOrBuilder getMatchOrBuilder() {
-            return getMatch();
+            return match_ == null ? acl.Acl.AclMatch.getDefaultInstance() : match_;
         }
 
         public static final int ACTION_FIELD_NUMBER = 4;
@@ -2365,7 +2429,7 @@ public final class Acl {
          */
         @java.lang.Override
         public acl.Acl.AclActionOrBuilder getActionOrBuilder() {
-            return getAction();
+            return action_ == null ? acl.Acl.AclAction.getDefaultInstance() : action_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -2386,7 +2450,7 @@ public final class Acl {
             if (sequenceId_ != 0) {
                 output.writeUInt32(1, sequenceId_);
             }
-            if (!getDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_);
             }
             if (match_ != null) {
@@ -2395,7 +2459,7 @@ public final class Acl {
             if (action_ != null) {
                 output.writeMessage(4, getAction());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -2407,7 +2471,7 @@ public final class Acl {
             if (sequenceId_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, sequenceId_);
             }
-            if (!getDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_);
             }
             if (match_ != null) {
@@ -2416,7 +2480,7 @@ public final class Acl {
             if (action_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getAction());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -2446,7 +2510,7 @@ public final class Acl {
                 if (!getAction().equals(other.getAction()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2470,7 +2534,7 @@ public final class Acl {
                 hash = (37 * hash) + ACTION_FIELD_NUMBER;
                 hash = (53 * hash) + getAction().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2564,34 +2628,26 @@ public final class Acl {
 
             // Construct using acl.Acl.AclEntry.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();
+                bitField0_ = 0;
                 sequenceId_ = 0;
                 description_ = "";
-                if (matchBuilder_ == null) {
-                    match_ = null;
-                } else {
-                    match_ = null;
+                match_ = null;
+                if (matchBuilder_ != null) {
+                    matchBuilder_.dispose();
                     matchBuilder_ = null;
                 }
-                if (actionBuilder_ == null) {
-                    action_ = null;
-                } else {
-                    action_ = null;
+                action_ = null;
+                if (actionBuilder_ != null) {
+                    actionBuilder_.dispose();
                     actionBuilder_ = null;
                 }
                 return this;
@@ -2619,50 +2675,27 @@ public final class Acl {
             @java.lang.Override
             public acl.Acl.AclEntry buildPartial() {
                 acl.Acl.AclEntry result = new acl.Acl.AclEntry(this);
-                result.sequenceId_ = sequenceId_;
-                result.description_ = description_;
-                if (matchBuilder_ == null) {
-                    result.match_ = match_;
-                } else {
-                    result.match_ = matchBuilder_.build();
-                }
-                if (actionBuilder_ == null) {
-                    result.action_ = action_;
-                } else {
-                    result.action_ = actionBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(acl.Acl.AclEntry result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.sequenceId_ = sequenceId_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.description_ = description_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.match_ = matchBuilder_ == null ? match_ : matchBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.action_ = actionBuilder_ == null ? action_ : actionBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -2683,6 +2716,7 @@ public final class Acl {
                 }
                 if (!other.getDescription().isEmpty()) {
                     description_ = other.description_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (other.hasMatch()) {
@@ -2691,7 +2725,7 @@ public final class Acl {
                 if (other.hasAction()) {
                     mergeAction(other.getAction());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2703,20 +2737,68 @@ public final class Acl {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                acl.Acl.AclEntry parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    sequenceId_ = input.readUInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 18:
+                                {
+                                    description_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getMatchFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    input.readMessage(getActionFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (acl.Acl.AclEntry) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int sequenceId_;
 
             /**
@@ -2735,6 +2817,7 @@ public final class Acl {
              */
             public Builder setSequenceId(int value) {
                 sequenceId_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -2744,6 +2827,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearSequenceId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 sequenceId_ = 0;
                 onChanged();
                 return this;
@@ -2792,6 +2876,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 description_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -2802,6 +2887,7 @@ public final class Acl {
              */
             public Builder clearDescription() {
                 description_ = getDefaultInstance().getDescription();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -2817,6 +2903,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 description_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -2830,7 +2917,7 @@ public final class Acl {
              * @return Whether the match field is set.
              */
             public boolean hasMatch() {
-                return matchBuilder_ != null || match_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -2854,10 +2941,11 @@ public final class Acl {
                         throw new NullPointerException();
                     }
                     match_ = value;
-                    onChanged();
                 } else {
                     matchBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -2867,10 +2955,11 @@ public final class Acl {
             public Builder setMatch(acl.Acl.AclMatch.Builder builderForValue) {
                 if (matchBuilder_ == null) {
                     match_ = builderForValue.build();
-                    onChanged();
                 } else {
                     matchBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -2879,15 +2968,16 @@ public final class Acl {
              */
             public Builder mergeMatch(acl.Acl.AclMatch value) {
                 if (matchBuilder_ == null) {
-                    if (match_ != null) {
-                        match_ = acl.Acl.AclMatch.newBuilder(match_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && match_ != null && match_ != acl.Acl.AclMatch.getDefaultInstance()) {
+                        getMatchBuilder().mergeFrom(value);
                     } else {
                         match_ = value;
                     }
-                    onChanged();
                 } else {
                     matchBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -2895,13 +2985,13 @@ public final class Acl {
              * <code>.acl.AclMatch match = 3;</code>
              */
             public Builder clearMatch() {
-                if (matchBuilder_ == null) {
-                    match_ = null;
-                    onChanged();
-                } else {
-                    match_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                match_ = null;
+                if (matchBuilder_ != null) {
+                    matchBuilder_.dispose();
                     matchBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2909,6 +2999,7 @@ public final class Acl {
              * <code>.acl.AclMatch match = 3;</code>
              */
             public acl.Acl.AclMatch.Builder getMatchBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getMatchFieldBuilder().getBuilder();
             }
@@ -2944,7 +3035,7 @@ public final class Acl {
              * @return Whether the action field is set.
              */
             public boolean hasAction() {
-                return actionBuilder_ != null || action_ != null;
+                return ((bitField0_ & 0x00000008) != 0);
             }
 
             /**
@@ -2968,10 +3059,11 @@ public final class Acl {
                         throw new NullPointerException();
                     }
                     action_ = value;
-                    onChanged();
                 } else {
                     actionBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -2981,10 +3073,11 @@ public final class Acl {
             public Builder setAction(acl.Acl.AclAction.Builder builderForValue) {
                 if (actionBuilder_ == null) {
                     action_ = builderForValue.build();
-                    onChanged();
                 } else {
                     actionBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -2993,15 +3086,16 @@ public final class Acl {
              */
             public Builder mergeAction(acl.Acl.AclAction value) {
                 if (actionBuilder_ == null) {
-                    if (action_ != null) {
-                        action_ = acl.Acl.AclAction.newBuilder(action_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000008) != 0) && action_ != null && action_ != acl.Acl.AclAction.getDefaultInstance()) {
+                        getActionBuilder().mergeFrom(value);
                     } else {
                         action_ = value;
                     }
-                    onChanged();
                 } else {
                     actionBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -3009,13 +3103,13 @@ public final class Acl {
              * <code>.acl.AclAction action = 4;</code>
              */
             public Builder clearAction() {
-                if (actionBuilder_ == null) {
-                    action_ = null;
-                    onChanged();
-                } else {
-                    action_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                action_ = null;
+                if (actionBuilder_ != null) {
+                    actionBuilder_.dispose();
                     actionBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -3023,6 +3117,7 @@ public final class Acl {
              * <code>.acl.AclAction action = 4;</code>
              */
             public acl.Acl.AclAction.Builder getActionBuilder() {
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return getActionFieldBuilder().getBuilder();
             }
@@ -3076,7 +3171,17 @@ public final class Acl {
 
             @java.lang.Override
             public AclEntry parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AclEntry(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -3199,81 +3304,6 @@ public final class Acl {
             return new AclRuleSet();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AclRuleSet(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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 16:
-                            {
-                                int rawValue = input.readEnum();
-                                type_ = rawValue;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                description_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                userId_ = s;
-                                break;
-                            }
-                        case 42:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    entries_ = new java.util.ArrayList<acl.Acl.AclEntry>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                entries_.add(input.readMessage(acl.Acl.AclEntry.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)) {
-                    entries_ = java.util.Collections.unmodifiableList(entries_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
         }
@@ -3285,7 +3315,8 @@ public final class Acl {
 
         public static final int NAME_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 1;</code>
@@ -3322,7 +3353,7 @@ public final class Acl {
 
         public static final int TYPE_FIELD_NUMBER = 2;
 
-        private int type_;
+        private int type_ = 0;
 
         /**
          * <code>.acl.AclRuleTypeEnum type = 2;</code>
@@ -3339,14 +3370,14 @@ public final class Acl {
          */
         @java.lang.Override
         public acl.Acl.AclRuleTypeEnum getType() {
-            @SuppressWarnings("deprecation")
-            acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+            acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.forNumber(type_);
             return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
         }
 
         public static final int DESCRIPTION_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object description_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object description_ = "";
 
         /**
          * <code>string description = 3;</code>
@@ -3383,7 +3414,8 @@ public final class Acl {
 
         public static final int USER_ID_FIELD_NUMBER = 4;
 
-        private volatile java.lang.Object userId_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object userId_ = "";
 
         /**
          * <code>string user_id = 4;</code>
@@ -3420,6 +3452,7 @@ public final class Acl {
 
         public static final int ENTRIES_FIELD_NUMBER = 5;
 
+        @SuppressWarnings("serial")
         private java.util.List<acl.Acl.AclEntry> entries_;
 
         /**
@@ -3477,22 +3510,22 @@ public final class Acl {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
             }
             if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
                 output.writeEnum(2, type_);
             }
-            if (!getDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, description_);
             }
-            if (!getUserIdBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userId_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 4, userId_);
             }
             for (int i = 0; i < entries_.size(); i++) {
                 output.writeMessage(5, entries_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -3501,22 +3534,22 @@ public final class Acl {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
             }
             if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, type_);
             }
-            if (!getDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(description_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, description_);
             }
-            if (!getUserIdBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(userId_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, userId_);
             }
             for (int i = 0; i < entries_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, entries_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -3540,7 +3573,7 @@ public final class Acl {
                 return false;
             if (!getEntriesList().equals(other.getEntriesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -3564,7 +3597,7 @@ public final class Acl {
                 hash = (37 * hash) + ENTRIES_FIELD_NUMBER;
                 hash = (53 * hash) + getEntriesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -3658,33 +3691,27 @@ public final class Acl {
 
             // Construct using acl.Acl.AclRuleSet.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getEntriesFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 name_ = "";
                 type_ = 0;
                 description_ = "";
                 userId_ = "";
                 if (entriesBuilder_ == null) {
                     entries_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    entries_ = null;
                     entriesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 return this;
             }
 
@@ -3710,52 +3737,40 @@ public final class Acl {
             @java.lang.Override
             public acl.Acl.AclRuleSet buildPartial() {
                 acl.Acl.AclRuleSet result = new acl.Acl.AclRuleSet(this);
-                int from_bitField0_ = bitField0_;
-                result.name_ = name_;
-                result.type_ = type_;
-                result.description_ = description_;
-                result.userId_ = userId_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(acl.Acl.AclRuleSet result) {
                 if (entriesBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
                         entries_ = java.util.Collections.unmodifiableList(entries_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000010);
                     }
                     result.entries_ = entries_;
                 } else {
                     result.entries_ = entriesBuilder_.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);
+            private void buildPartial0(acl.Acl.AclRuleSet result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.type_ = type_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.description_ = description_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.userId_ = userId_;
+                }
             }
 
             @java.lang.Override
@@ -3773,6 +3788,7 @@ public final class Acl {
                     return this;
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
                 if (other.type_ != 0) {
@@ -3780,17 +3796,19 @@ public final class Acl {
                 }
                 if (!other.getDescription().isEmpty()) {
                     description_ = other.description_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (!other.getUserId().isEmpty()) {
                     userId_ = other.userId_;
+                    bitField0_ |= 0x00000008;
                     onChanged();
                 }
                 if (entriesBuilder_ == null) {
                     if (!other.entries_.isEmpty()) {
                         if (entries_.isEmpty()) {
                             entries_ = other.entries_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                         } else {
                             ensureEntriesIsMutable();
                             entries_.addAll(other.entries_);
@@ -3803,14 +3821,14 @@ public final class Acl {
                             entriesBuilder_.dispose();
                             entriesBuilder_ = null;
                             entries_ = other.entries_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                             entriesBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getEntriesFieldBuilder() : null;
                         } else {
                             entriesBuilder_.addAllMessages(other.entries_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -3822,17 +3840,75 @@ public final class Acl {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                acl.Acl.AclRuleSet parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    type_ = input.readEnum();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 26:
+                                {
+                                    description_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    userId_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    acl.Acl.AclEntry m = input.readMessage(acl.Acl.AclEntry.parser(), extensionRegistry);
+                                    if (entriesBuilder_ == null) {
+                                        ensureEntriesIsMutable();
+                                        entries_.add(m);
+                                    } else {
+                                        entriesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (acl.Acl.AclRuleSet) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -3881,6 +3957,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -3891,6 +3968,7 @@ public final class Acl {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -3906,6 +3984,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -3928,6 +4007,7 @@ public final class Acl {
              */
             public Builder setTypeValue(int value) {
                 type_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -3938,8 +4018,7 @@ public final class Acl {
              */
             @java.lang.Override
             public acl.Acl.AclRuleTypeEnum getType() {
-                @SuppressWarnings("deprecation")
-                acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+                acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.forNumber(type_);
                 return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
             }
 
@@ -3952,6 +4031,7 @@ public final class Acl {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000002;
                 type_ = value.getNumber();
                 onChanged();
                 return this;
@@ -3962,6 +4042,7 @@ public final class Acl {
              * @return This builder for chaining.
              */
             public Builder clearType() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 type_ = 0;
                 onChanged();
                 return this;
@@ -4010,6 +4091,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 description_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -4020,6 +4102,7 @@ public final class Acl {
              */
             public Builder clearDescription() {
                 description_ = getDefaultInstance().getDescription();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -4035,6 +4118,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 description_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -4082,6 +4166,7 @@ public final class Acl {
                     throw new NullPointerException();
                 }
                 userId_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -4092,6 +4177,7 @@ public final class Acl {
              */
             public Builder clearUserId() {
                 userId_ = getDefaultInstance().getUserId();
+                bitField0_ = (bitField0_ & ~0x00000008);
                 onChanged();
                 return this;
             }
@@ -4107,6 +4193,7 @@ public final class Acl {
                 }
                 checkByteStringIsUtf8(value);
                 userId_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -4114,9 +4201,9 @@ public final class Acl {
             private java.util.List<acl.Acl.AclEntry> entries_ = java.util.Collections.emptyList();
 
             private void ensureEntriesIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000010) != 0)) {
                     entries_ = new java.util.ArrayList<acl.Acl.AclEntry>(entries_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000010;
                 }
             }
 
@@ -4268,7 +4355,7 @@ public final class Acl {
             public Builder clearEntries() {
                 if (entriesBuilder_ == null) {
                     entries_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000010);
                     onChanged();
                 } else {
                     entriesBuilder_.clear();
@@ -4342,7 +4429,7 @@ public final class Acl {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder> getEntriesFieldBuilder() {
                 if (entriesBuilder_ == null) {
-                    entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder>(entries_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder>(entries_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
                     entries_ = null;
                 }
                 return entriesBuilder_;
@@ -4375,7 +4462,17 @@ public final class Acl {
 
             @java.lang.Override
             public AclRuleSet parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AclRuleSet(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -4417,10 +4514,10 @@ public final class Acl {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\tacl.proto\022\003acl\"\252\001\n\010AclMatch\022\014\n\004dscp\030\001 " + "\001(\r\022\020\n\010protocol\030\002 \001(\r\022\023\n\013src_address\030\003 \001" + "(\t\022\023\n\013dst_address\030\004 \001(\t\022\020\n\010src_port\030\005 \001(" + "\r\022\020\n\010dst_port\030\006 \001(\r\022\030\n\020start_mpls_label\030" + "\007 \001(\r\022\026\n\016end_mpls_label\030\010 \001(\r\"i\n\tAclActi" + "on\0221\n\016forward_action\030\001 \001(\0162\031.acl.AclForw" + "ardActionEnum\022)\n\nlog_action\030\002 \001(\0162\025.acl." + "AclLogActionEnum\"r\n\010AclEntry\022\023\n\013sequence" + "_id\030\001 \001(\r\022\023\n\013description\030\002 \001(\t\022\034\n\005match\030" + "\003 \001(\0132\r.acl.AclMatch\022\036\n\006action\030\004 \001(\0132\016.a" + "cl.AclAction\"\204\001\n\nAclRuleSet\022\014\n\004name\030\001 \001(" + "\t\022\"\n\004type\030\002 \001(\0162\024.acl.AclRuleTypeEnum\022\023\n" + "\013description\030\003 \001(\t\022\017\n\007user_id\030\004 \001(\t\022\036\n\007e" + "ntries\030\005 \003(\0132\r.acl.AclEntry*\231\001\n\017AclRuleT" + "ypeEnum\022\031\n\025ACLRULETYPE_UNDEFINED\020\000\022\024\n\020AC" + "LRULETYPE_IPV4\020\001\022\024\n\020ACLRULETYPE_IPV6\020\002\022\022" + "\n\016ACLRULETYPE_L2\020\003\022\024\n\020ACLRULETYPE_MPLS\020\004" + "\022\025\n\021ACLRULETYPE_MIXED\020\005*\227\001\n\024AclForwardAc" + "tionEnum\022!\n\035ACLFORWARDINGACTION_UNDEFINE" + "D\020\000\022\034\n\030ACLFORWARDINGACTION_DROP\020\001\022\036\n\032ACL" + "FORWARDINGACTION_ACCEPT\020\002\022\036\n\032ACLFORWARDI" + "NGACTION_REJECT\020\003*_\n\020AclLogActionEnum\022\032\n" + "\026ACLLOGACTION_UNDEFINED\020\000\022\026\n\022ACLLOGACTIO" + "N_NOLOG\020\001\022\027\n\023ACLLOGACTION_SYSLOG\020\002b\006prot" + "o3" };
+        java.lang.String[] descriptorData = { "\n\tacl.proto\022\003acl\"\275\001\n\010AclMatch\022\014\n\004dscp\030\001 " + "\001(\r\022\020\n\010protocol\030\002 \001(\r\022\023\n\013src_address\030\003 \001" + "(\t\022\023\n\013dst_address\030\004 \001(\t\022\020\n\010src_port\030\005 \001(" + "\r\022\020\n\010dst_port\030\006 \001(\r\022\030\n\020start_mpls_label\030" + "\007 \001(\r\022\026\n\016end_mpls_label\030\010 \001(\r\022\021\n\ttcp_fla" + "gs\030\t \001(\t\"i\n\tAclAction\0221\n\016forward_action\030" + "\001 \001(\0162\031.acl.AclForwardActionEnum\022)\n\nlog_" + "action\030\002 \001(\0162\025.acl.AclLogActionEnum\"r\n\010A" + "clEntry\022\023\n\013sequence_id\030\001 \001(\r\022\023\n\013descript" + "ion\030\002 \001(\t\022\034\n\005match\030\003 \001(\0132\r.acl.AclMatch\022" + "\036\n\006action\030\004 \001(\0132\016.acl.AclAction\"\204\001\n\nAclR" + "uleSet\022\014\n\004name\030\001 \001(\t\022\"\n\004type\030\002 \001(\0162\024.acl" + ".AclRuleTypeEnum\022\023\n\013description\030\003 \001(\t\022\017\n" + "\007user_id\030\004 \001(\t\022\036\n\007entries\030\005 \003(\0132\r.acl.Ac" + "lEntry*\231\001\n\017AclRuleTypeEnum\022\031\n\025ACLRULETYP" + "E_UNDEFINED\020\000\022\024\n\020ACLRULETYPE_IPV4\020\001\022\024\n\020A" + "CLRULETYPE_IPV6\020\002\022\022\n\016ACLRULETYPE_L2\020\003\022\024\n" + "\020ACLRULETYPE_MPLS\020\004\022\025\n\021ACLRULETYPE_MIXED" + "\020\005*\227\001\n\024AclForwardActionEnum\022!\n\035ACLFORWAR" + "DINGACTION_UNDEFINED\020\000\022\034\n\030ACLFORWARDINGA" + "CTION_DROP\020\001\022\036\n\032ACLFORWARDINGACTION_ACCE" + "PT\020\002\022\036\n\032ACLFORWARDINGACTION_REJECT\020\003*_\n\020" + "AclLogActionEnum\022\032\n\026ACLLOGACTION_UNDEFIN" + "ED\020\000\022\026\n\022ACLLOGACTION_NOLOG\020\001\022\027\n\023ACLLOGAC" + "TION_SYSLOG\020\002b\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
         internal_static_acl_AclMatch_descriptor = getDescriptor().getMessageTypes().get(0);
-        internal_static_acl_AclMatch_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_acl_AclMatch_descriptor, new java.lang.String[] { "Dscp", "Protocol", "SrcAddress", "DstAddress", "SrcPort", "DstPort", "StartMplsLabel", "EndMplsLabel" });
+        internal_static_acl_AclMatch_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_acl_AclMatch_descriptor, new java.lang.String[] { "Dscp", "Protocol", "SrcAddress", "DstAddress", "SrcPort", "DstPort", "StartMplsLabel", "EndMplsLabel", "TcpFlags" });
         internal_static_acl_AclAction_descriptor = getDescriptor().getMessageTypes().get(1);
         internal_static_acl_AclAction_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_acl_AclAction_descriptor, new java.lang.String[] { "ForwardAction", "LogAction" });
         internal_static_acl_AclEntry_descriptor = getDescriptor().getMessageTypes().get(2);
diff --git a/src/ztp/target/generated-sources/grpc/context/ContextOuterClass.java b/src/ztp/target/generated-sources/grpc/context/ContextOuterClass.java
index 4593770498216267b8d2f95dd728fccfbb9dc134..cfce9dad0df2af8ed6a9bf31d8184bf38a590cea 100644
--- a/src/ztp/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/ztp/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -195,6 +195,22 @@ public final class ContextOuterClass {
          * <code>DEVICEDRIVER_OC = 11;</code>
          */
         DEVICEDRIVER_OC(11),
+        /**
+         * <code>DEVICEDRIVER_QKD = 12;</code>
+         */
+        DEVICEDRIVER_QKD(12),
+        /**
+         * <code>DEVICEDRIVER_IETF_L3VPN = 13;</code>
+         */
+        DEVICEDRIVER_IETF_L3VPN(13),
+        /**
+         * <code>DEVICEDRIVER_IETF_SLICE = 14;</code>
+         */
+        DEVICEDRIVER_IETF_SLICE(14),
+        /**
+         * <code>DEVICEDRIVER_NCE = 15;</code>
+         */
+        DEVICEDRIVER_NCE(15),
         UNRECOGNIZED(-1);
 
         /**
@@ -261,6 +277,26 @@ public final class ContextOuterClass {
          */
         public static final int DEVICEDRIVER_OC_VALUE = 11;
 
+        /**
+         * <code>DEVICEDRIVER_QKD = 12;</code>
+         */
+        public static final int DEVICEDRIVER_QKD_VALUE = 12;
+
+        /**
+         * <code>DEVICEDRIVER_IETF_L3VPN = 13;</code>
+         */
+        public static final int DEVICEDRIVER_IETF_L3VPN_VALUE = 13;
+
+        /**
+         * <code>DEVICEDRIVER_IETF_SLICE = 14;</code>
+         */
+        public static final int DEVICEDRIVER_IETF_SLICE_VALUE = 14;
+
+        /**
+         * <code>DEVICEDRIVER_NCE = 15;</code>
+         */
+        public static final int DEVICEDRIVER_NCE_VALUE = 15;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -308,6 +344,14 @@ public final class ContextOuterClass {
                     return DEVICEDRIVER_IETF_ACTN;
                 case 11:
                     return DEVICEDRIVER_OC;
+                case 12:
+                    return DEVICEDRIVER_QKD;
+                case 13:
+                    return DEVICEDRIVER_IETF_L3VPN;
+                case 14:
+                    return DEVICEDRIVER_IETF_SLICE;
+                case 15:
+                    return DEVICEDRIVER_NCE;
                 default:
                     return null;
             }
@@ -471,6 +515,141 @@ public final class ContextOuterClass {
         }
     }
 
+    /**
+     * Protobuf enum {@code context.LinkTypeEnum}
+     */
+    public enum LinkTypeEnum implements com.google.protobuf.ProtocolMessageEnum {
+
+        /**
+         * <code>LINKTYPE_UNKNOWN = 0;</code>
+         */
+        LINKTYPE_UNKNOWN(0),
+        /**
+         * <code>LINKTYPE_COPPER = 1;</code>
+         */
+        LINKTYPE_COPPER(1),
+        /**
+         * <code>LINKTYPE_FIBER = 2;</code>
+         */
+        LINKTYPE_FIBER(2),
+        /**
+         * <code>LINKTYPE_RADIO = 3;</code>
+         */
+        LINKTYPE_RADIO(3),
+        /**
+         * <code>LINKTYPE_VIRTUAL = 4;</code>
+         */
+        LINKTYPE_VIRTUAL(4),
+        UNRECOGNIZED(-1);
+
+        /**
+         * <code>LINKTYPE_UNKNOWN = 0;</code>
+         */
+        public static final int LINKTYPE_UNKNOWN_VALUE = 0;
+
+        /**
+         * <code>LINKTYPE_COPPER = 1;</code>
+         */
+        public static final int LINKTYPE_COPPER_VALUE = 1;
+
+        /**
+         * <code>LINKTYPE_FIBER = 2;</code>
+         */
+        public static final int LINKTYPE_FIBER_VALUE = 2;
+
+        /**
+         * <code>LINKTYPE_RADIO = 3;</code>
+         */
+        public static final int LINKTYPE_RADIO_VALUE = 3;
+
+        /**
+         * <code>LINKTYPE_VIRTUAL = 4;</code>
+         */
+        public static final int LINKTYPE_VIRTUAL_VALUE = 4;
+
+        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 LinkTypeEnum 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 LinkTypeEnum forNumber(int value) {
+            switch(value) {
+                case 0:
+                    return LINKTYPE_UNKNOWN;
+                case 1:
+                    return LINKTYPE_COPPER;
+                case 2:
+                    return LINKTYPE_FIBER;
+                case 3:
+                    return LINKTYPE_RADIO;
+                case 4:
+                    return LINKTYPE_VIRTUAL;
+                default:
+                    return null;
+            }
+        }
+
+        public static com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum> internalGetValueMap() {
+            return internalValueMap;
+        }
+
+        private static final com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<LinkTypeEnum>() {
+
+            public LinkTypeEnum findValueByNumber(int number) {
+                return LinkTypeEnum.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 LinkTypeEnum[] VALUES = values();
+
+        public static LinkTypeEnum 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 LinkTypeEnum(int value) {
+            this.value = value;
+        }
+    }
+
     /**
      * Protobuf enum {@code context.ServiceTypeEnum}
      */
@@ -504,6 +683,10 @@ public final class ContextOuterClass {
          * <code>SERVICETYPE_OPTICAL_CONNECTIVITY = 6;</code>
          */
         SERVICETYPE_OPTICAL_CONNECTIVITY(6),
+        /**
+         * <code>SERVICETYPE_QKD = 7;</code>
+         */
+        SERVICETYPE_QKD(7),
         UNRECOGNIZED(-1);
 
         /**
@@ -541,6 +724,11 @@ public final class ContextOuterClass {
          */
         public static final int SERVICETYPE_OPTICAL_CONNECTIVITY_VALUE = 6;
 
+        /**
+         * <code>SERVICETYPE_QKD = 7;</code>
+         */
+        public static final int SERVICETYPE_QKD_VALUE = 7;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -578,6 +766,8 @@ public final class ContextOuterClass {
                     return SERVICETYPE_E2E;
                 case 6:
                     return SERVICETYPE_OPTICAL_CONNECTIVITY;
+                case 7:
+                    return SERVICETYPE_QKD;
                 default:
                     return null;
             }
@@ -606,7 +796,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(3);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(4);
         }
 
         private static final ServiceTypeEnum[] VALUES = values();
@@ -752,7 +942,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(4);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(5);
         }
 
         private static final ServiceStatusEnum[] VALUES = values();
@@ -898,7 +1088,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(5);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(6);
         }
 
         private static final SliceStatusEnum[] VALUES = values();
@@ -1015,7 +1205,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(6);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
         }
 
         private static final ConfigActionEnum[] VALUES = values();
@@ -1132,7 +1322,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8);
         }
 
         private static final ConstraintActionEnum[] VALUES = values();
@@ -1311,7 +1501,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(9);
         }
 
         private static final IsolationLevelEnum[] VALUES = values();
@@ -1363,44 +1553,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -1425,7 +1577,7 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -1434,7 +1586,7 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -1448,7 +1600,7 @@ public final class ContextOuterClass {
                 return super.equals(obj);
             }
             context.ContextOuterClass.Empty other = (context.ContextOuterClass.Empty) obj;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -1460,7 +1612,7 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -1558,17 +1710,10 @@ public final class ContextOuterClass {
 
             // 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
@@ -1603,36 +1748,6 @@ public final class ContextOuterClass {
                 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) {
@@ -1646,7 +1761,7 @@ public final class ContextOuterClass {
             public Builder mergeFrom(context.ContextOuterClass.Empty other) {
                 if (other == context.ContextOuterClass.Empty.getDefaultInstance())
                     return this;
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -1658,17 +1773,35 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Empty) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -1699,7 +1832,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -1757,50 +1900,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -1812,7 +1911,8 @@ public final class ContextOuterClass {
 
         public static final int UUID_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object uuid_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object uuid_ = "";
 
         /**
          * <code>string uuid = 1;</code>
@@ -1862,10 +1962,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getUuidBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uuid_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -1874,10 +1974,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getUuidBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uuid_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -1893,7 +1993,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.Uuid other = (context.ContextOuterClass.Uuid) obj;
             if (!getUuid().equals(other.getUuid()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -1907,7 +2007,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + UUID_FIELD_NUMBER;
             hash = (53 * hash) + getUuid().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2001,22 +2101,16 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 uuid_ = "";
                 return this;
             }
@@ -2043,39 +2137,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Uuid buildPartial() {
                 context.ContextOuterClass.Uuid result = new context.ContextOuterClass.Uuid(this);
-                result.uuid_ = uuid_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Uuid result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.uuid_ = uuid_;
+                }
             }
 
             @java.lang.Override
@@ -2093,9 +2166,10 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getUuid().isEmpty()) {
                     uuid_ = other.uuid_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2107,20 +2181,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    uuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Uuid) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object uuid_ = "";
 
             /**
@@ -2164,6 +2265,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 uuid_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -2174,6 +2276,7 @@ public final class ContextOuterClass {
              */
             public Builder clearUuid() {
                 uuid_ = getDefaultInstance().getUuid();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -2189,6 +2292,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 uuid_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -2220,7 +2324,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -2271,49 +2385,6 @@ public final class ContextOuterClass {
             return new Timestamp();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Timestamp(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;
-                            }
-                        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_Timestamp_descriptor;
         }
@@ -2325,7 +2396,7 @@ public final class ContextOuterClass {
 
         public static final int TIMESTAMP_FIELD_NUMBER = 1;
 
-        private double timestamp_;
+        private double timestamp_ = 0D;
 
         /**
          * <code>double timestamp = 1;</code>
@@ -2351,10 +2422,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (timestamp_ != 0D) {
+            if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
                 output.writeDouble(1, timestamp_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -2363,10 +2434,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (timestamp_ != 0D) {
+            if (java.lang.Double.doubleToRawLongBits(timestamp_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeDoubleSize(1, timestamp_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -2382,7 +2453,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.Timestamp other = (context.ContextOuterClass.Timestamp) obj;
             if (java.lang.Double.doubleToLongBits(getTimestamp()) != java.lang.Double.doubleToLongBits(other.getTimestamp()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2396,7 +2467,7 @@ public final class ContextOuterClass {
             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 = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2490,22 +2561,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Timestamp.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();
+                bitField0_ = 0;
                 timestamp_ = 0D;
                 return this;
             }
@@ -2532,39 +2597,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Timestamp buildPartial() {
                 context.ContextOuterClass.Timestamp result = new context.ContextOuterClass.Timestamp(this);
-                result.timestamp_ = timestamp_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Timestamp result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.timestamp_ = timestamp_;
+                }
             }
 
             @java.lang.Override
@@ -2583,7 +2627,7 @@ public final class ContextOuterClass {
                 if (other.getTimestamp() != 0D) {
                     setTimestamp(other.getTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2595,20 +2639,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Timestamp parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 9:
+                                {
+                                    timestamp_ = input.readDouble();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 9
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Timestamp) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private double timestamp_;
 
             /**
@@ -2627,6 +2698,7 @@ public final class ContextOuterClass {
              */
             public Builder setTimestamp(double value) {
                 timestamp_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -2636,6 +2708,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearTimestamp() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 timestamp_ = 0D;
                 onChanged();
                 return this;
@@ -2668,7 +2741,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Timestamp parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Timestamp(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -2743,63 +2826,6 @@ public final class ContextOuterClass {
             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 10:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = subBuilder.buildPartial();
-                                }
-                                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;
         }
@@ -2836,12 +2862,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         public static final int EVENT_TYPE_FIELD_NUMBER = 2;
 
-        private int eventType_;
+        private int eventType_ = 0;
 
         /**
          * <code>.context.EventTypeEnum event_type = 2;</code>
@@ -2858,8 +2884,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventTypeEnum getEventType() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+            context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.forNumber(eventType_);
             return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
         }
 
@@ -2884,7 +2909,7 @@ public final class ContextOuterClass {
             if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
                 output.writeEnum(2, eventType_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -2899,7 +2924,7 @@ public final class ContextOuterClass {
             if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, eventType_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -2921,7 +2946,7 @@ public final class ContextOuterClass {
             }
             if (eventType_ != other.eventType_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2939,7 +2964,7 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
             hash = (53 * hash) + eventType_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -3033,26 +3058,19 @@ public final class ContextOuterClass {
 
             // 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();
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                bitField0_ = 0;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
                 eventType_ = 0;
@@ -3081,44 +3099,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Event buildPartial() {
                 context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                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);
+            private void buildPartial0(context.ContextOuterClass.Event result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.eventType_ = eventType_;
+                }
             }
 
             @java.lang.Override
@@ -3140,7 +3135,7 @@ public final class ContextOuterClass {
                 if (other.eventType_ != 0) {
                     setEventTypeValue(other.getEventTypeValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -3152,20 +3147,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    eventType_ = input.readEnum();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Timestamp timestamp_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
@@ -3175,7 +3204,7 @@ public final class ContextOuterClass {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -3199,10 +3228,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3212,10 +3242,11 @@ public final class ContextOuterClass {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3224,15 +3255,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3240,13 +3272,13 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 1;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -3254,6 +3286,7 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 1;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -3298,6 +3331,7 @@ public final class ContextOuterClass {
              */
             public Builder setEventTypeValue(int value) {
                 eventType_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -3308,8 +3342,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.EventTypeEnum getEventType() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+                context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.forNumber(eventType_);
                 return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
             }
 
@@ -3322,6 +3355,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000002;
                 eventType_ = value.getNumber();
                 onChanged();
                 return this;
@@ -3332,6 +3366,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearEventType() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 eventType_ = 0;
                 onChanged();
                 return this;
@@ -3364,7 +3399,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -3430,57 +3475,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -3517,7 +3511,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
-            return getContextUuid();
+            return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -3538,7 +3532,7 @@ public final class ContextOuterClass {
             if (contextUuid_ != null) {
                 output.writeMessage(1, getContextUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -3550,7 +3544,7 @@ public final class ContextOuterClass {
             if (contextUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getContextUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -3570,7 +3564,7 @@ public final class ContextOuterClass {
                 if (!getContextUuid().equals(other.getContextUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -3586,7 +3580,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getContextUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -3684,26 +3678,19 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                contextUuid_ = null;
+                if (contextUuidBuilder_ != null) {
+                    contextUuidBuilder_.dispose();
                     contextUuidBuilder_ = null;
                 }
                 return this;
@@ -3731,43 +3718,18 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ContextId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextUuid_ = contextUuidBuilder_ == null ? contextUuid_ : contextUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -3786,7 +3748,7 @@ public final class ContextOuterClass {
                 if (other.hasContextUuid()) {
                     mergeContextUuid(other.getContextUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -3798,20 +3760,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid contextUuid_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
@@ -3821,7 +3810,7 @@ public final class ContextOuterClass {
              * @return Whether the contextUuid field is set.
              */
             public boolean hasContextUuid() {
-                return contextUuidBuilder_ != null || contextUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -3845,10 +3834,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextUuid_ = value;
-                    onChanged();
                 } else {
                     contextUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3858,10 +3848,11 @@ public final class ContextOuterClass {
             public Builder setContextUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (contextUuidBuilder_ == null) {
                     contextUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3870,15 +3861,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
                 if (contextUuidBuilder_ == null) {
-                    if (contextUuid_ != null) {
-                        contextUuid_ = context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextUuid_ != null && contextUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getContextUuidBuilder().mergeFrom(value);
                     } else {
                         contextUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     contextUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3886,13 +3878,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid context_uuid = 1;</code>
              */
             public Builder clearContextUuid() {
-                if (contextUuidBuilder_ == null) {
-                    contextUuid_ = null;
-                    onChanged();
-                } else {
-                    contextUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextUuid_ = null;
+                if (contextUuidBuilder_ != null) {
+                    contextUuidBuilder_.dispose();
                     contextUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -3900,6 +3892,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid context_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextUuidFieldBuilder().getBuilder();
             }
@@ -3953,7 +3946,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -4123,113 +4126,6 @@ public final class ContextOuterClass {
             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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                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 34:
-                            {
-                                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 42:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                                    sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                sliceIds_.add(input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 50:
-                            {
-                                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_);
-                }
-                if (((mutable_bitField0_ & 0x00000004) != 0)) {
-                    sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_Context_descriptor;
         }
@@ -4266,12 +4162,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -4308,6 +4205,7 @@ public final class ContextOuterClass {
 
         public static final int TOPOLOGY_IDS_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
 
         /**
@@ -4352,6 +4250,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICE_IDS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
 
         /**
@@ -4396,6 +4295,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_IDS_FIELD_NUMBER = 5;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
 
         /**
@@ -4465,7 +4365,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
-            return getController();
+            return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -4486,7 +4386,7 @@ public final class ContextOuterClass {
             if (contextId_ != null) {
                 output.writeMessage(1, getContextId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
             for (int i = 0; i < topologyIds_.size(); i++) {
@@ -4501,7 +4401,7 @@ public final class ContextOuterClass {
             if (controller_ != null) {
                 output.writeMessage(6, getController());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -4513,7 +4413,7 @@ public final class ContextOuterClass {
             if (contextId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getContextId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
             for (int i = 0; i < topologyIds_.size(); i++) {
@@ -4528,7 +4428,7 @@ public final class ContextOuterClass {
             if (controller_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getController());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -4562,7 +4462,7 @@ public final class ContextOuterClass {
                 if (!getController().equals(other.getController()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -4596,7 +4496,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
                 hash = (53 * hash) + getController().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -4690,54 +4590,46 @@ public final class ContextOuterClass {
 
             // 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();
-                    getSliceIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                } else {
-                    contextId_ = null;
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
                 name_ = "";
                 if (topologyIdsBuilder_ == null) {
                     topologyIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    topologyIds_ = null;
                     topologyIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (serviceIdsBuilder_ == null) {
                     serviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    serviceIds_ = null;
                     serviceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
                 if (sliceIdsBuilder_ == null) {
                     sliceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
                 } else {
+                    sliceIds_ = null;
                     sliceIdsBuilder_.clear();
                 }
-                if (controllerBuilder_ == null) {
-                    controller_ = null;
-                } else {
-                    controller_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                controller_ = null;
+                if (controllerBuilder_ != null) {
+                    controllerBuilder_.dispose();
                     controllerBuilder_ = null;
                 }
                 return this;
@@ -4765,77 +4657,55 @@ public final class ContextOuterClass {
             @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();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Context result) {
                 if (topologyIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.topologyIds_ = topologyIds_;
                 } else {
                     result.topologyIds_ = topologyIdsBuilder_.build();
                 }
                 if (serviceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.serviceIds_ = serviceIds_;
                 } else {
                     result.serviceIds_ = serviceIdsBuilder_.build();
                 }
                 if (sliceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0)) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
                         sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000004);
+                        bitField0_ = (bitField0_ & ~0x00000010);
                     }
                     result.sliceIds_ = sliceIds_;
                 } else {
                     result.sliceIds_ = sliceIdsBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.Context result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.controller_ = controllerBuilder_ == null ? controller_ : controllerBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -4856,13 +4726,14 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (topologyIdsBuilder_ == null) {
                     if (!other.topologyIds_.isEmpty()) {
                         if (topologyIds_.isEmpty()) {
                             topologyIds_ = other.topologyIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureTopologyIdsIsMutable();
                             topologyIds_.addAll(other.topologyIds_);
@@ -4875,7 +4746,7 @@ public final class ContextOuterClass {
                             topologyIdsBuilder_.dispose();
                             topologyIdsBuilder_ = null;
                             topologyIds_ = other.topologyIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             topologyIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getTopologyIdsFieldBuilder() : null;
                         } else {
                             topologyIdsBuilder_.addAllMessages(other.topologyIds_);
@@ -4886,7 +4757,7 @@ public final class ContextOuterClass {
                     if (!other.serviceIds_.isEmpty()) {
                         if (serviceIds_.isEmpty()) {
                             serviceIds_ = other.serviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureServiceIdsIsMutable();
                             serviceIds_.addAll(other.serviceIds_);
@@ -4899,7 +4770,7 @@ public final class ContextOuterClass {
                             serviceIdsBuilder_.dispose();
                             serviceIdsBuilder_ = null;
                             serviceIds_ = other.serviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             serviceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getServiceIdsFieldBuilder() : null;
                         } else {
                             serviceIdsBuilder_.addAllMessages(other.serviceIds_);
@@ -4910,7 +4781,7 @@ public final class ContextOuterClass {
                     if (!other.sliceIds_.isEmpty()) {
                         if (sliceIds_.isEmpty()) {
                             sliceIds_ = other.sliceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                         } else {
                             ensureSliceIdsIsMutable();
                             sliceIds_.addAll(other.sliceIds_);
@@ -4923,7 +4794,7 @@ public final class ContextOuterClass {
                             sliceIdsBuilder_.dispose();
                             sliceIdsBuilder_ = null;
                             sliceIds_ = other.sliceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                             sliceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSliceIdsFieldBuilder() : null;
                         } else {
                             sliceIdsBuilder_.addAllMessages(other.sliceIds_);
@@ -4933,7 +4804,7 @@ public final class ContextOuterClass {
                 if (other.hasController()) {
                     mergeController(other.getController());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -4945,17 +4816,92 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.TopologyId m = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+                                    if (topologyIdsBuilder_ == null) {
+                                        ensureTopologyIdsIsMutable();
+                                        topologyIds_.add(m);
+                                    } else {
+                                        topologyIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.ServiceId m = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+                                    if (serviceIdsBuilder_ == null) {
+                                        ensureServiceIdsIsMutable();
+                                        serviceIds_.add(m);
+                                    } else {
+                                        serviceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.SliceId m = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+                                    if (sliceIdsBuilder_ == null) {
+                                        ensureSliceIdsIsMutable();
+                                        sliceIds_.add(m);
+                                    } else {
+                                        sliceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getControllerFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -4970,7 +4916,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -4994,10 +4940,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5007,10 +4954,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5019,15 +4967,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5035,13 +4984,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -5049,6 +4998,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -5118,6 +5068,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -5128,6 +5079,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -5143,6 +5095,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -5150,9 +5103,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ = java.util.Collections.emptyList();
 
             private void ensureTopologyIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -5304,7 +5257,7 @@ public final class ContextOuterClass {
             public Builder clearTopologyIds() {
                 if (topologyIdsBuilder_ == null) {
                     topologyIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     topologyIdsBuilder_.clear();
@@ -5378,7 +5331,7 @@ public final class ContextOuterClass {
 
             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());
+                    topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(topologyIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     topologyIds_ = null;
                 }
                 return topologyIdsBuilder_;
@@ -5387,9 +5340,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ = java.util.Collections.emptyList();
 
             private void ensureServiceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -5541,7 +5494,7 @@ public final class ContextOuterClass {
             public Builder clearServiceIds() {
                 if (serviceIdsBuilder_ == null) {
                     serviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     serviceIdsBuilder_.clear();
@@ -5615,7 +5568,7 @@ public final class ContextOuterClass {
 
             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());
+                    serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(serviceIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     serviceIds_ = null;
                 }
                 return serviceIdsBuilder_;
@@ -5624,9 +5577,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ = java.util.Collections.emptyList();
 
             private void ensureSliceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
+                if (!((bitField0_ & 0x00000010) != 0)) {
                     sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
-                    bitField0_ |= 0x00000004;
+                    bitField0_ |= 0x00000010;
                 }
             }
 
@@ -5778,7 +5731,7 @@ public final class ContextOuterClass {
             public Builder clearSliceIds() {
                 if (sliceIdsBuilder_ == null) {
                     sliceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
+                    bitField0_ = (bitField0_ & ~0x00000010);
                     onChanged();
                 } else {
                     sliceIdsBuilder_.clear();
@@ -5852,7 +5805,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> getSliceIdsFieldBuilder() {
                 if (sliceIdsBuilder_ == null) {
-                    sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(sliceIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
+                    sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(sliceIds_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
                     sliceIds_ = null;
                 }
                 return sliceIdsBuilder_;
@@ -5867,7 +5820,7 @@ public final class ContextOuterClass {
              * @return Whether the controller field is set.
              */
             public boolean hasController() {
-                return controllerBuilder_ != null || controller_ != null;
+                return ((bitField0_ & 0x00000020) != 0);
             }
 
             /**
@@ -5891,10 +5844,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     controller_ = value;
-                    onChanged();
                 } else {
                     controllerBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -5904,10 +5858,11 @@ public final class ContextOuterClass {
             public Builder setController(context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
                 if (controllerBuilder_ == null) {
                     controller_ = builderForValue.build();
-                    onChanged();
                 } else {
                     controllerBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -5916,15 +5871,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
                 if (controllerBuilder_ == null) {
-                    if (controller_ != null) {
-                        controller_ = context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000020) != 0) && controller_ != null && controller_ != context.ContextOuterClass.TeraFlowController.getDefaultInstance()) {
+                        getControllerBuilder().mergeFrom(value);
                     } else {
                         controller_ = value;
                     }
-                    onChanged();
                 } else {
                     controllerBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -5932,13 +5888,13 @@ public final class ContextOuterClass {
              * <code>.context.TeraFlowController controller = 6;</code>
              */
             public Builder clearController() {
-                if (controllerBuilder_ == null) {
-                    controller_ = null;
-                    onChanged();
-                } else {
-                    controller_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                controller_ = null;
+                if (controllerBuilder_ != null) {
+                    controllerBuilder_.dispose();
                     controllerBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -5946,6 +5902,7 @@ public final class ContextOuterClass {
              * <code>.context.TeraFlowController controller = 6;</code>
              */
             public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return getControllerFieldBuilder().getBuilder();
             }
@@ -5999,7 +5956,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -6070,57 +6037,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -6132,6 +6048,7 @@ public final class ContextOuterClass {
 
         public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
 
         /**
@@ -6192,7 +6109,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < contextIds_.size(); i++) {
                 output.writeMessage(1, contextIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -6204,7 +6121,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < contextIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, contextIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -6220,7 +6137,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
             if (!getContextIdsList().equals(other.getContextIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -6236,7 +6153,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getContextIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -6330,29 +6247,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (contextIdsBuilder_ == null) {
                     contextIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    contextIds_ = null;
                     contextIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -6378,7 +6289,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ContextIdList buildPartial() {
                 context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ContextIdList result) {
                 if (contextIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
@@ -6388,38 +6307,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ContextIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -6459,7 +6350,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -6471,17 +6362,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ContextId m = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+                                    if (contextIdsBuilder_ == null) {
+                                        ensureContextIdsIsMutable();
+                                        contextIds_.add(m);
+                                    } else {
+                                        contextIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -6751,7 +6672,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -6822,57 +6753,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -6884,6 +6764,7 @@ public final class ContextOuterClass {
 
         public static final int CONTEXTS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Context> contexts_;
 
         /**
@@ -6944,7 +6825,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < contexts_.size(); i++) {
                 output.writeMessage(1, contexts_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -6956,7 +6837,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < contexts_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, contexts_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -6972,7 +6853,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
             if (!getContextsList().equals(other.getContextsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -6988,7 +6869,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
                 hash = (53 * hash) + getContextsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -7082,29 +6963,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (contextsBuilder_ == null) {
                     contexts_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    contexts_ = null;
                     contextsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -7130,7 +7005,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ContextList buildPartial() {
                 context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ContextList result) {
                 if (contextsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         contexts_ = java.util.Collections.unmodifiableList(contexts_);
@@ -7140,38 +7023,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ContextList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -7211,7 +7066,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -7223,17 +7078,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Context m = input.readMessage(context.ContextOuterClass.Context.parser(), extensionRegistry);
+                                    if (contextsBuilder_ == null) {
+                                        ensureContextsIsMutable();
+                                        contexts_.add(m);
+                                    } else {
+                                        contextsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -7503,7 +7388,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -7582,70 +7477,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -7682,7 +7513,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int CONTEXT_ID_FIELD_NUMBER = 2;
@@ -7712,7 +7543,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -7736,7 +7567,7 @@ public final class ContextOuterClass {
             if (contextId_ != null) {
                 output.writeMessage(2, getContextId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -7751,7 +7582,7 @@ public final class ContextOuterClass {
             if (contextId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getContextId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -7777,7 +7608,7 @@ public final class ContextOuterClass {
                 if (!getContextId().equals(other.getContextId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -7797,7 +7628,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getContextId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -7891,32 +7722,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                } else {
-                    contextId_ = null;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
                 return this;
@@ -7944,48 +7767,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ContextEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -8007,7 +7803,7 @@ public final class ContextOuterClass {
                 if (other.hasContextId()) {
                     mergeContextId(other.getContextId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -8019,20 +7815,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -8042,7 +7872,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -8066,10 +7896,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8079,10 +7910,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8091,15 +7923,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8107,13 +7940,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8121,6 +7954,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -8156,7 +7990,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -8180,10 +8014,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8193,10 +8028,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8205,15 +8041,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8221,13 +8058,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 2;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8235,6 +8072,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 2;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -8288,7 +8126,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -8371,70 +8219,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -8471,7 +8255,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
         public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
@@ -8501,7 +8285,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
-            return getTopologyUuid();
+            return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -8525,7 +8309,7 @@ public final class ContextOuterClass {
             if (topologyUuid_ != null) {
                 output.writeMessage(2, getTopologyUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -8540,7 +8324,7 @@ public final class ContextOuterClass {
             if (topologyUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTopologyUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -8566,7 +8350,7 @@ public final class ContextOuterClass {
                 if (!getTopologyUuid().equals(other.getTopologyUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -8586,7 +8370,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getTopologyUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -8684,32 +8468,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
-                if (topologyUuidBuilder_ == null) {
-                    topologyUuid_ = null;
-                } else {
-                    topologyUuid_ = null;
+                topologyUuid_ = null;
+                if (topologyUuidBuilder_ != null) {
+                    topologyUuidBuilder_.dispose();
                     topologyUuidBuilder_ = null;
                 }
                 return this;
@@ -8737,48 +8513,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.TopologyId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.topologyUuid_ = topologyUuidBuilder_ == null ? topologyUuid_ : topologyUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -8800,7 +8549,7 @@ public final class ContextOuterClass {
                 if (other.hasTopologyUuid()) {
                     mergeTopologyUuid(other.getTopologyUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -8812,20 +8561,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getTopologyUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 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_;
@@ -8835,7 +8618,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -8859,10 +8642,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8872,10 +8656,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8884,15 +8669,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8900,13 +8686,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8914,6 +8700,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -8949,7 +8736,7 @@ public final class ContextOuterClass {
              * @return Whether the topologyUuid field is set.
              */
             public boolean hasTopologyUuid() {
-                return topologyUuidBuilder_ != null || topologyUuid_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -8973,10 +8760,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     topologyUuid_ = value;
-                    onChanged();
                 } else {
                     topologyUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8986,10 +8774,11 @@ public final class ContextOuterClass {
             public Builder setTopologyUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (topologyUuidBuilder_ == null) {
                     topologyUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     topologyUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8998,15 +8787,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
                 if (topologyUuidBuilder_ == null) {
-                    if (topologyUuid_ != null) {
-                        topologyUuid_ = context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && topologyUuid_ != null && topologyUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getTopologyUuidBuilder().mergeFrom(value);
                     } else {
                         topologyUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     topologyUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -9014,13 +8804,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid topology_uuid = 2;</code>
              */
             public Builder clearTopologyUuid() {
-                if (topologyUuidBuilder_ == null) {
-                    topologyUuid_ = null;
-                    onChanged();
-                } else {
-                    topologyUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                topologyUuid_ = null;
+                if (topologyUuidBuilder_ != null) {
+                    topologyUuidBuilder_.dispose();
                     topologyUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -9028,6 +8818,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid topology_uuid = 2;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getTopologyUuidFieldBuilder().getBuilder();
             }
@@ -9081,7 +8872,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -9181,6 +8982,31 @@ public final class ContextOuterClass {
          * <code>repeated .context.LinkId link_ids = 4;</code>
          */
         context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(int index);
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        context.ContextOuterClass.LinkId getOpticalLinkIds(int index);
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        int getOpticalLinkIdsCount();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList();
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index);
     }
 
     /**
@@ -9200,6 +9026,7 @@ public final class ContextOuterClass {
             name_ = "";
             deviceIds_ = java.util.Collections.emptyList();
             linkIds_ = java.util.Collections.emptyList();
+            opticalLinkIds_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
@@ -9208,88 +9035,6 @@ public final class ContextOuterClass {
             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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                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 34:
-                            {
-                                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;
         }
@@ -9326,12 +9071,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-            return getTopologyId();
+            return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -9368,6 +9114,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICE_IDS_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
 
         /**
@@ -9412,6 +9159,7 @@ public final class ContextOuterClass {
 
         public static final int LINK_IDS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
 
         /**
@@ -9454,6 +9202,51 @@ public final class ContextOuterClass {
             return linkIds_.get(index);
         }
 
+        public static final int OPTICAL_LINK_IDS_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.LinkId> opticalLinkIds_;
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList() {
+            return opticalLinkIds_;
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList() {
+            return opticalLinkIds_;
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public int getOpticalLinkIdsCount() {
+            return opticalLinkIds_.size();
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkId getOpticalLinkIds(int index) {
+            return opticalLinkIds_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index) {
+            return opticalLinkIds_.get(index);
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -9472,7 +9265,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 output.writeMessage(1, getTopologyId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
             for (int i = 0; i < deviceIds_.size(); i++) {
@@ -9481,7 +9274,10 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 output.writeMessage(4, linkIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            for (int i = 0; i < opticalLinkIds_.size(); i++) {
+                output.writeMessage(5, opticalLinkIds_.get(i));
+            }
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -9493,7 +9289,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getTopologyId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
             for (int i = 0; i < deviceIds_.size(); i++) {
@@ -9502,7 +9298,10 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            for (int i = 0; i < opticalLinkIds_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, opticalLinkIds_.get(i));
+            }
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -9528,7 +9327,9 @@ public final class ContextOuterClass {
                 return false;
             if (!getLinkIdsList().equals(other.getLinkIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getOpticalLinkIdsList().equals(other.getOpticalLinkIdsList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -9554,7 +9355,11 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            if (getOpticalLinkIdsCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINK_IDS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinkIdsList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -9648,43 +9453,43 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
                 name_ = "";
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    deviceIds_ = null;
                     deviceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (linkIdsBuilder_ == null) {
                     linkIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    linkIds_ = null;
                     linkIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIds_ = java.util.Collections.emptyList();
+                } else {
+                    opticalLinkIds_ = null;
+                    opticalLinkIdsBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 return this;
             }
 
@@ -9710,63 +9515,52 @@ public final class ContextOuterClass {
             @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();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Topology result) {
                 if (deviceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.deviceIds_ = deviceIds_;
                 } else {
                     result.deviceIds_ = deviceIdsBuilder_.build();
                 }
                 if (linkIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     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);
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
+                        opticalLinkIds_ = java.util.Collections.unmodifiableList(opticalLinkIds_);
+                        bitField0_ = (bitField0_ & ~0x00000010);
+                    }
+                    result.opticalLinkIds_ = opticalLinkIds_;
+                } else {
+                    result.opticalLinkIds_ = opticalLinkIdsBuilder_.build();
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.Topology result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.topologyId_ = topologyIdBuilder_ == null ? topologyId_ : topologyIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
             }
 
             @java.lang.Override
@@ -9787,13 +9581,14 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (deviceIdsBuilder_ == null) {
                     if (!other.deviceIds_.isEmpty()) {
                         if (deviceIds_.isEmpty()) {
                             deviceIds_ = other.deviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureDeviceIdsIsMutable();
                             deviceIds_.addAll(other.deviceIds_);
@@ -9806,7 +9601,7 @@ public final class ContextOuterClass {
                             deviceIdsBuilder_.dispose();
                             deviceIdsBuilder_ = null;
                             deviceIds_ = other.deviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             deviceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDeviceIdsFieldBuilder() : null;
                         } else {
                             deviceIdsBuilder_.addAllMessages(other.deviceIds_);
@@ -9817,7 +9612,7 @@ public final class ContextOuterClass {
                     if (!other.linkIds_.isEmpty()) {
                         if (linkIds_.isEmpty()) {
                             linkIds_ = other.linkIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureLinkIdsIsMutable();
                             linkIds_.addAll(other.linkIds_);
@@ -9830,14 +9625,38 @@ public final class ContextOuterClass {
                             linkIdsBuilder_.dispose();
                             linkIdsBuilder_ = null;
                             linkIds_ = other.linkIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             linkIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkIdsFieldBuilder() : null;
                         } else {
                             linkIdsBuilder_.addAllMessages(other.linkIds_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (!other.opticalLinkIds_.isEmpty()) {
+                        if (opticalLinkIds_.isEmpty()) {
+                            opticalLinkIds_ = other.opticalLinkIds_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                        } else {
+                            ensureOpticalLinkIdsIsMutable();
+                            opticalLinkIds_.addAll(other.opticalLinkIds_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalLinkIds_.isEmpty()) {
+                        if (opticalLinkIdsBuilder_.isEmpty()) {
+                            opticalLinkIdsBuilder_.dispose();
+                            opticalLinkIdsBuilder_ = null;
+                            opticalLinkIds_ = other.opticalLinkIds_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                            opticalLinkIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinkIdsFieldBuilder() : null;
+                        } else {
+                            opticalLinkIdsBuilder_.addAllMessages(other.opticalLinkIds_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -9849,17 +9668,85 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getTopologyIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.DeviceId m = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+                                    if (deviceIdsBuilder_ == null) {
+                                        ensureDeviceIdsIsMutable();
+                                        deviceIds_.add(m);
+                                    } else {
+                                        deviceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.LinkId m = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+                                    if (linkIdsBuilder_ == null) {
+                                        ensureLinkIdsIsMutable();
+                                        linkIds_.add(m);
+                                    } else {
+                                        linkIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.LinkId m = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+                                    if (opticalLinkIdsBuilder_ == null) {
+                                        ensureOpticalLinkIdsIsMutable();
+                                        opticalLinkIds_.add(m);
+                                    } else {
+                                        opticalLinkIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -9874,7 +9761,7 @@ public final class ContextOuterClass {
              * @return Whether the topologyId field is set.
              */
             public boolean hasTopologyId() {
-                return topologyIdBuilder_ != null || topologyId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -9898,10 +9785,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     topologyId_ = value;
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9911,10 +9799,11 @@ public final class ContextOuterClass {
             public Builder setTopologyId(context.ContextOuterClass.TopologyId.Builder builderForValue) {
                 if (topologyIdBuilder_ == null) {
                     topologyId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9923,15 +9812,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
                 if (topologyIdBuilder_ == null) {
-                    if (topologyId_ != null) {
-                        topologyId_ = context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && topologyId_ != null && topologyId_ != context.ContextOuterClass.TopologyId.getDefaultInstance()) {
+                        getTopologyIdBuilder().mergeFrom(value);
                     } else {
                         topologyId_ = value;
                     }
-                    onChanged();
                 } else {
                     topologyIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9939,13 +9829,13 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public Builder clearTopologyId() {
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                    onChanged();
-                } else {
-                    topologyId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -9953,6 +9843,7 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getTopologyIdFieldBuilder().getBuilder();
             }
@@ -10022,6 +9913,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -10032,6 +9924,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -10047,6 +9940,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -10054,9 +9948,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ = java.util.Collections.emptyList();
 
             private void ensureDeviceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -10208,7 +10102,7 @@ public final class ContextOuterClass {
             public Builder clearDeviceIds() {
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     deviceIdsBuilder_.clear();
@@ -10282,7 +10176,7 @@ public final class ContextOuterClass {
 
             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());
+                    deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(deviceIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     deviceIds_ = null;
                 }
                 return deviceIdsBuilder_;
@@ -10291,9 +10185,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.LinkId> linkIds_ = java.util.Collections.emptyList();
 
             private void ensureLinkIdsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -10445,7 +10339,7 @@ public final class ContextOuterClass {
             public Builder clearLinkIds() {
                 if (linkIdsBuilder_ == null) {
                     linkIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     linkIdsBuilder_.clear();
@@ -10519,12 +10413,249 @@ public final class ContextOuterClass {
 
             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());
+                    linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(linkIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     linkIds_ = null;
                 }
                 return linkIdsBuilder_;
             }
 
+            private java.util.List<context.ContextOuterClass.LinkId> opticalLinkIds_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalLinkIdsIsMutable() {
+                if (!((bitField0_ & 0x00000010) != 0)) {
+                    opticalLinkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(opticalLinkIds_);
+                    bitField0_ |= 0x00000010;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> opticalLinkIdsBuilder_;
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.LinkId> getOpticalLinkIdsList() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinkIds_);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public int getOpticalLinkIdsCount() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.size();
+                } else {
+                    return opticalLinkIdsBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId getOpticalLinkIds(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.get(index);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder setOpticalLinkIds(int index, context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder setOpticalLinkIds(int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(int index, context.ContextOuterClass.LinkId value) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addOpticalLinkIds(int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder addAllOpticalLinkIds(java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinkIds_);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder clearOpticalLinkIds() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIds_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000010);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public Builder removeOpticalLinkIds(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    ensureOpticalLinkIdsIsMutable();
+                    opticalLinkIds_.remove(index);
+                    onChanged();
+                } else {
+                    opticalLinkIdsBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder getOpticalLinkIdsBuilder(int index) {
+                return getOpticalLinkIdsFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkIdOrBuilder getOpticalLinkIdsOrBuilder(int index) {
+                if (opticalLinkIdsBuilder_ == null) {
+                    return opticalLinkIds_.get(index);
+                } else {
+                    return opticalLinkIdsBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsOrBuilderList() {
+                if (opticalLinkIdsBuilder_ != null) {
+                    return opticalLinkIdsBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinkIds_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder addOpticalLinkIdsBuilder() {
+                return getOpticalLinkIdsFieldBuilder().addBuilder(context.ContextOuterClass.LinkId.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder addOpticalLinkIdsBuilder(int index) {
+                return getOpticalLinkIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.LinkId.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.LinkId optical_link_ids = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.LinkId.Builder> getOpticalLinkIdsBuilderList() {
+                return getOpticalLinkIdsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> getOpticalLinkIdsFieldBuilder() {
+                if (opticalLinkIdsBuilder_ == null) {
+                    opticalLinkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(opticalLinkIds_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
+                    opticalLinkIds_ = null;
+                }
+                return opticalLinkIdsBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -10552,7 +10683,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -10652,6 +10793,31 @@ public final class ContextOuterClass {
          * <code>repeated .context.Link links = 4;</code>
          */
         context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(int index);
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        context.ContextOuterClass.OpticalLink getOpticalLinks(int index);
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        int getOpticalLinksCount();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index);
     }
 
     /**
@@ -10671,6 +10837,7 @@ public final class ContextOuterClass {
             name_ = "";
             devices_ = java.util.Collections.emptyList();
             links_ = java.util.Collections.emptyList();
+            opticalLinks_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
@@ -10679,88 +10846,6 @@ public final class ContextOuterClass {
             return new TopologyDetails();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private TopologyDetails(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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                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;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                                    links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                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)) {
-                    devices_ = java.util.Collections.unmodifiableList(devices_);
-                }
-                if (((mutable_bitField0_ & 0x00000002) != 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_TopologyDetails_descriptor;
         }
@@ -10797,12 +10882,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-            return getTopologyId();
+            return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -10839,6 +10925,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICES_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Device> devices_;
 
         /**
@@ -10883,6 +10970,7 @@ public final class ContextOuterClass {
 
         public static final int LINKS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Link> links_;
 
         /**
@@ -10925,6 +11013,51 @@ public final class ContextOuterClass {
             return links_.get(index);
         }
 
+        public static final int OPTICAL_LINKS_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_;
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+            return opticalLinks_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+            return opticalLinks_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public int getOpticalLinksCount() {
+            return opticalLinks_.size();
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+            return opticalLinks_.get(index);
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+            return opticalLinks_.get(index);
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -10943,7 +11076,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 output.writeMessage(1, getTopologyId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
             for (int i = 0; i < devices_.size(); i++) {
@@ -10952,7 +11085,10 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 output.writeMessage(4, links_.get(i));
             }
-            unknownFields.writeTo(output);
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                output.writeMessage(5, opticalLinks_.get(i));
+            }
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -10964,7 +11100,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getTopologyId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
             for (int i = 0; i < devices_.size(); i++) {
@@ -10973,7 +11109,10 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, links_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, opticalLinks_.get(i));
+            }
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -10999,7 +11138,9 @@ public final class ContextOuterClass {
                 return false;
             if (!getLinksList().equals(other.getLinksList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getOpticalLinksList().equals(other.getOpticalLinksList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -11025,7 +11166,11 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINKS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinksList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            if (getOpticalLinksCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINKS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinksList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -11119,43 +11264,43 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.TopologyDetails.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();
-                    getLinksFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                } else {
-                    topologyId_ = null;
+                bitField0_ = 0;
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
                 name_ = "";
                 if (devicesBuilder_ == null) {
                     devices_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    devices_ = null;
                     devicesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (linksBuilder_ == null) {
                     links_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    links_ = null;
                     linksBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                } else {
+                    opticalLinks_ = null;
+                    opticalLinksBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 return this;
             }
 
@@ -11181,63 +11326,52 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.TopologyDetails buildPartial() {
                 context.ContextOuterClass.TopologyDetails result = new context.ContextOuterClass.TopologyDetails(this);
-                int from_bitField0_ = bitField0_;
-                if (topologyIdBuilder_ == null) {
-                    result.topologyId_ = topologyId_;
-                } else {
-                    result.topologyId_ = topologyIdBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.TopologyDetails result) {
                 if (devicesBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         devices_ = java.util.Collections.unmodifiableList(devices_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.devices_ = devices_;
                 } else {
                     result.devices_ = devicesBuilder_.build();
                 }
                 if (linksBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         links_ = java.util.Collections.unmodifiableList(links_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     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);
+                if (opticalLinksBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
+                        opticalLinks_ = java.util.Collections.unmodifiableList(opticalLinks_);
+                        bitField0_ = (bitField0_ & ~0x00000010);
+                    }
+                    result.opticalLinks_ = opticalLinks_;
+                } else {
+                    result.opticalLinks_ = opticalLinksBuilder_.build();
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.TopologyDetails result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.topologyId_ = topologyIdBuilder_ == null ? topologyId_ : topologyIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
             }
 
             @java.lang.Override
@@ -11258,13 +11392,14 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (devicesBuilder_ == null) {
                     if (!other.devices_.isEmpty()) {
                         if (devices_.isEmpty()) {
                             devices_ = other.devices_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureDevicesIsMutable();
                             devices_.addAll(other.devices_);
@@ -11277,7 +11412,7 @@ public final class ContextOuterClass {
                             devicesBuilder_.dispose();
                             devicesBuilder_ = null;
                             devices_ = other.devices_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             devicesBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDevicesFieldBuilder() : null;
                         } else {
                             devicesBuilder_.addAllMessages(other.devices_);
@@ -11288,7 +11423,7 @@ public final class ContextOuterClass {
                     if (!other.links_.isEmpty()) {
                         if (links_.isEmpty()) {
                             links_ = other.links_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureLinksIsMutable();
                             links_.addAll(other.links_);
@@ -11301,14 +11436,38 @@ public final class ContextOuterClass {
                             linksBuilder_.dispose();
                             linksBuilder_ = null;
                             links_ = other.links_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             linksBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinksFieldBuilder() : null;
                         } else {
                             linksBuilder_.addAllMessages(other.links_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                if (opticalLinksBuilder_ == null) {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinks_.isEmpty()) {
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                        } else {
+                            ensureOpticalLinksIsMutable();
+                            opticalLinks_.addAll(other.opticalLinks_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinksBuilder_.isEmpty()) {
+                            opticalLinksBuilder_.dispose();
+                            opticalLinksBuilder_ = null;
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                            opticalLinksBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinksFieldBuilder() : null;
+                        } else {
+                            opticalLinksBuilder_.addAllMessages(other.opticalLinks_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -11320,17 +11479,85 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.TopologyDetails parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getTopologyIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.Device m = input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry);
+                                    if (devicesBuilder_ == null) {
+                                        ensureDevicesIsMutable();
+                                        devices_.add(m);
+                                    } else {
+                                        devicesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.Link m = input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry);
+                                    if (linksBuilder_ == null) {
+                                        ensureLinksIsMutable();
+                                        links_.add(m);
+                                    } else {
+                                        linksBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.OpticalLink m = input.readMessage(context.ContextOuterClass.OpticalLink.parser(), extensionRegistry);
+                                    if (opticalLinksBuilder_ == null) {
+                                        ensureOpticalLinksIsMutable();
+                                        opticalLinks_.add(m);
+                                    } else {
+                                        opticalLinksBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TopologyDetails) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -11345,7 +11572,7 @@ public final class ContextOuterClass {
              * @return Whether the topologyId field is set.
              */
             public boolean hasTopologyId() {
-                return topologyIdBuilder_ != null || topologyId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -11369,10 +11596,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     topologyId_ = value;
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -11382,10 +11610,11 @@ public final class ContextOuterClass {
             public Builder setTopologyId(context.ContextOuterClass.TopologyId.Builder builderForValue) {
                 if (topologyIdBuilder_ == null) {
                     topologyId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -11394,15 +11623,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
                 if (topologyIdBuilder_ == null) {
-                    if (topologyId_ != null) {
-                        topologyId_ = context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && topologyId_ != null && topologyId_ != context.ContextOuterClass.TopologyId.getDefaultInstance()) {
+                        getTopologyIdBuilder().mergeFrom(value);
                     } else {
                         topologyId_ = value;
                     }
-                    onChanged();
                 } else {
                     topologyIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -11410,13 +11640,13 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public Builder clearTopologyId() {
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                    onChanged();
-                } else {
-                    topologyId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -11424,6 +11654,7 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getTopologyIdFieldBuilder().getBuilder();
             }
@@ -11493,6 +11724,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -11503,6 +11735,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -11518,6 +11751,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -11525,9 +11759,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.Device> devices_ = java.util.Collections.emptyList();
 
             private void ensureDevicesIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -11679,7 +11913,7 @@ public final class ContextOuterClass {
             public Builder clearDevices() {
                 if (devicesBuilder_ == null) {
                     devices_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     devicesBuilder_.clear();
@@ -11753,7 +11987,7 @@ public final class ContextOuterClass {
 
             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());
+                    devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(devices_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     devices_ = null;
                 }
                 return devicesBuilder_;
@@ -11762,9 +11996,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.Link> links_ = java.util.Collections.emptyList();
 
             private void ensureLinksIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -11916,7 +12150,7 @@ public final class ContextOuterClass {
             public Builder clearLinks() {
                 if (linksBuilder_ == null) {
                     links_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     linksBuilder_.clear();
@@ -11990,12 +12224,249 @@ public final class ContextOuterClass {
 
             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_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(links_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     links_ = null;
                 }
                 return linksBuilder_;
             }
 
+            private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalLinksIsMutable() {
+                if (!((bitField0_ & 0x00000010) != 0)) {
+                    opticalLinks_ = new java.util.ArrayList<context.ContextOuterClass.OpticalLink>(opticalLinks_);
+                    bitField0_ |= 0x00000010;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> opticalLinksBuilder_;
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+                if (opticalLinksBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                } else {
+                    return opticalLinksBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public int getOpticalLinksCount() {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.size();
+                } else {
+                    return opticalLinksBuilder_.getCount();
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder addAllOpticalLinks(java.lang.Iterable<? extends context.ContextOuterClass.OpticalLink> values) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinks_);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder clearOpticalLinks() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000010);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public Builder removeOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.remove(index);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder getOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
+                } else {
+                    return opticalLinksBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+                if (opticalLinksBuilder_ != null) {
+                    return opticalLinksBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder() {
+                return getOpticalLinksFieldBuilder().addBuilder(context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 5;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink.Builder> getOpticalLinksBuilderList() {
+                return getOpticalLinksFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksFieldBuilder() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder>(opticalLinks_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
+                    opticalLinks_ = null;
+                }
+                return opticalLinksBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -12023,7 +12494,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public TopologyDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new TopologyDetails(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -12094,57 +12575,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -12156,6 +12586,7 @@ public final class ContextOuterClass {
 
         public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
 
         /**
@@ -12216,7 +12647,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < topologyIds_.size(); i++) {
                 output.writeMessage(1, topologyIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -12228,7 +12659,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < topologyIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, topologyIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -12244,7 +12675,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
             if (!getTopologyIdsList().equals(other.getTopologyIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -12260,7 +12691,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getTopologyIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -12354,29 +12785,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (topologyIdsBuilder_ == null) {
                     topologyIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    topologyIds_ = null;
                     topologyIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -12402,7 +12827,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.TopologyIdList buildPartial() {
                 context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.TopologyIdList result) {
                 if (topologyIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
@@ -12412,38 +12845,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.TopologyIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -12483,7 +12888,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -12495,17 +12900,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.TopologyId m = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+                                    if (topologyIdsBuilder_ == null) {
+                                        ensureTopologyIdsIsMutable();
+                                        topologyIds_.add(m);
+                                    } else {
+                                        topologyIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -12775,7 +13210,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -12846,57 +13291,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -12908,6 +13302,7 @@ public final class ContextOuterClass {
 
         public static final int TOPOLOGIES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Topology> topologies_;
 
         /**
@@ -12968,7 +13363,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < topologies_.size(); i++) {
                 output.writeMessage(1, topologies_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -12980,7 +13375,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < topologies_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, topologies_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -12996,7 +13391,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
             if (!getTopologiesList().equals(other.getTopologiesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -13012,7 +13407,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
                 hash = (53 * hash) + getTopologiesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -13106,29 +13501,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (topologiesBuilder_ == null) {
                     topologies_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    topologies_ = null;
                     topologiesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -13154,7 +13543,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.TopologyList buildPartial() {
                 context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.TopologyList result) {
                 if (topologiesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         topologies_ = java.util.Collections.unmodifiableList(topologies_);
@@ -13164,38 +13561,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.TopologyList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -13235,7 +13604,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -13247,17 +13616,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Topology m = input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry);
+                                    if (topologiesBuilder_ == null) {
+                                        ensureTopologiesIsMutable();
+                                        topologies_.add(m);
+                                    } else {
+                                        topologiesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -13527,7 +13926,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -13606,70 +14015,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -13706,7 +14051,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
@@ -13736,7 +14081,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-            return getTopologyId();
+            return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -13760,7 +14105,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 output.writeMessage(2, getTopologyId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -13775,7 +14120,7 @@ public final class ContextOuterClass {
             if (topologyId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTopologyId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -13801,7 +14146,7 @@ public final class ContextOuterClass {
                 if (!getTopologyId().equals(other.getTopologyId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -13821,7 +14166,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getTopologyId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -13915,32 +14260,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                } else {
-                    topologyId_ = null;
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
                 return this;
@@ -13968,48 +14305,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.TopologyEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.topologyId_ = topologyIdBuilder_ == null ? topologyId_ : topologyIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -14031,7 +14341,7 @@ public final class ContextOuterClass {
                 if (other.hasTopologyId()) {
                     mergeTopologyId(other.getTopologyId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -14043,20 +14353,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getTopologyIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -14066,7 +14410,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -14090,10 +14434,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14103,10 +14448,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14115,15 +14461,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14131,13 +14478,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -14145,6 +14492,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -14180,7 +14528,7 @@ public final class ContextOuterClass {
              * @return Whether the topologyId field is set.
              */
             public boolean hasTopologyId() {
-                return topologyIdBuilder_ != null || topologyId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -14204,10 +14552,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     topologyId_ = value;
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -14217,10 +14566,11 @@ public final class ContextOuterClass {
             public Builder setTopologyId(context.ContextOuterClass.TopologyId.Builder builderForValue) {
                 if (topologyIdBuilder_ == null) {
                     topologyId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -14229,15 +14579,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
                 if (topologyIdBuilder_ == null) {
-                    if (topologyId_ != null) {
-                        topologyId_ = context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && topologyId_ != null && topologyId_ != context.ContextOuterClass.TopologyId.getDefaultInstance()) {
+                        getTopologyIdBuilder().mergeFrom(value);
                     } else {
                         topologyId_ = value;
                     }
-                    onChanged();
                 } else {
                     topologyIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -14245,13 +14596,13 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 2;</code>
              */
             public Builder clearTopologyId() {
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                    onChanged();
-                } else {
-                    topologyId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -14259,6 +14610,7 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 2;</code>
              */
             public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getTopologyIdFieldBuilder().getBuilder();
             }
@@ -14312,7 +14664,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -14378,57 +14740,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -14465,7 +14776,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-            return getDeviceUuid();
+            return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -14486,7 +14797,7 @@ public final class ContextOuterClass {
             if (deviceUuid_ != null) {
                 output.writeMessage(1, getDeviceUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -14498,7 +14809,7 @@ public final class ContextOuterClass {
             if (deviceUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getDeviceUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -14518,7 +14829,7 @@ public final class ContextOuterClass {
                 if (!getDeviceUuid().equals(other.getDeviceUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -14534,7 +14845,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getDeviceUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -14632,26 +14943,19 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                deviceUuid_ = null;
+                if (deviceUuidBuilder_ != null) {
+                    deviceUuidBuilder_.dispose();
                     deviceUuidBuilder_ = null;
                 }
                 return this;
@@ -14679,43 +14983,18 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.deviceUuid_ = deviceUuidBuilder_ == null ? deviceUuid_ : deviceUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -14734,7 +15013,7 @@ public final class ContextOuterClass {
                 if (other.hasDeviceUuid()) {
                     mergeDeviceUuid(other.getDeviceUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -14746,20 +15025,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDeviceUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid deviceUuid_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
@@ -14769,7 +15075,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceUuid field is set.
              */
             public boolean hasDeviceUuid() {
-                return deviceUuidBuilder_ != null || deviceUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -14793,10 +15099,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceUuid_ = value;
-                    onChanged();
                 } else {
                     deviceUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14806,10 +15113,11 @@ public final class ContextOuterClass {
             public Builder setDeviceUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (deviceUuidBuilder_ == null) {
                     deviceUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14818,15 +15126,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
                 if (deviceUuidBuilder_ == null) {
-                    if (deviceUuid_ != null) {
-                        deviceUuid_ = context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && deviceUuid_ != null && deviceUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getDeviceUuidBuilder().mergeFrom(value);
                     } else {
                         deviceUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14834,13 +15143,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid device_uuid = 1;</code>
              */
             public Builder clearDeviceUuid() {
-                if (deviceUuidBuilder_ == null) {
-                    deviceUuid_ = null;
-                    onChanged();
-                } else {
-                    deviceUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                deviceUuid_ = null;
+                if (deviceUuidBuilder_ != null) {
+                    deviceUuidBuilder_.dispose();
                     deviceUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -14848,6 +15157,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid device_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDeviceUuidFieldBuilder().getBuilder();
             }
@@ -14901,7 +15211,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -15153,154 +15473,6 @@ public final class ContextOuterClass {
             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();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                deviceType_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                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 40:
-                            {
-                                int rawValue = input.readEnum();
-                                deviceOperationalStatus_ = rawValue;
-                                break;
-                            }
-                        case 48:
-                            {
-                                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 50:
-                            {
-                                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 58:
-                            {
-                                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;
-                            }
-                        case 66:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                                    components_ = new java.util.ArrayList<context.ContextOuterClass.Component>();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                components_.add(input.readMessage(context.ContextOuterClass.Component.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 74:
-                            {
-                                context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-                                if (controllerId_ != null) {
-                                    subBuilder = controllerId_.toBuilder();
-                                }
-                                controllerId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(controllerId_);
-                                    controllerId_ = 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)) {
-                    deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-                }
-                if (((mutable_bitField0_ & 0x00000002) != 0)) {
-                    deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-                }
-                if (((mutable_bitField0_ & 0x00000004) != 0)) {
-                    components_ = java.util.Collections.unmodifiableList(components_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_Device_descriptor;
         }
@@ -15337,12 +15509,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-            return getDeviceId();
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -15379,7 +15552,8 @@ public final class ContextOuterClass {
 
         public static final int DEVICE_TYPE_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object deviceType_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object deviceType_ = "";
 
         /**
          * <code>string device_type = 3;</code>
@@ -15441,12 +15615,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-            return getDeviceConfig();
+            return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
         }
 
         public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 5;
 
-        private int deviceOperationalStatus_;
+        private int deviceOperationalStatus_ = 0;
 
         /**
          * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
@@ -15463,20 +15637,19 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+            context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.forNumber(deviceOperationalStatus_);
             return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
         }
 
         public static final int DEVICE_DRIVERS_FIELD_NUMBER = 6;
 
+        @SuppressWarnings("serial")
         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);
+                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.forNumber(from);
                 return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
             }
         };
@@ -15532,6 +15705,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 7;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
 
         /**
@@ -15576,6 +15750,7 @@ public final class ContextOuterClass {
 
         public static final int COMPONENTS_FIELD_NUMBER = 8;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Component> components_;
 
         /**
@@ -15677,7 +15852,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getControllerIdOrBuilder() {
-            return getControllerId();
+            return controllerId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : controllerId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -15699,10 +15874,10 @@ public final class ContextOuterClass {
             if (deviceId_ != null) {
                 output.writeMessage(1, getDeviceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
-            if (!getDeviceTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(deviceType_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, deviceType_);
             }
             if (deviceConfig_ != null) {
@@ -15727,7 +15902,7 @@ public final class ContextOuterClass {
             if (controllerId_ != null) {
                 output.writeMessage(9, getControllerId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -15739,10 +15914,10 @@ public final class ContextOuterClass {
             if (deviceId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getDeviceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
-            if (!getDeviceTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(deviceType_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, deviceType_);
             }
             if (deviceConfig_ != null) {
@@ -15772,7 +15947,7 @@ public final class ContextOuterClass {
             if (controllerId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getControllerId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -15816,7 +15991,7 @@ public final class ContextOuterClass {
                 if (!getControllerId().equals(other.getControllerId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -15858,7 +16033,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONTROLLER_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getControllerId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -15952,57 +16127,48 @@ public final class ContextOuterClass {
 
             // 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();
-                    getComponentsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                } else {
-                    deviceId_ = null;
+                bitField0_ = 0;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
                 name_ = "";
                 deviceType_ = "";
-                if (deviceConfigBuilder_ == null) {
-                    deviceConfig_ = null;
-                } else {
-                    deviceConfig_ = null;
+                deviceConfig_ = null;
+                if (deviceConfigBuilder_ != null) {
+                    deviceConfigBuilder_.dispose();
                     deviceConfigBuilder_ = null;
                 }
                 deviceOperationalStatus_ = 0;
                 deviceDrivers_ = java.util.Collections.emptyList();
-                bitField0_ = (bitField0_ & ~0x00000001);
+                bitField0_ = (bitField0_ & ~0x00000020);
                 if (deviceEndpointsBuilder_ == null) {
                     deviceEndpoints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    deviceEndpoints_ = null;
                     deviceEndpointsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000040);
                 if (componentsBuilder_ == null) {
                     components_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
                 } else {
+                    components_ = null;
                     componentsBuilder_.clear();
                 }
-                if (controllerIdBuilder_ == null) {
-                    controllerId_ = null;
-                } else {
-                    controllerId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000080);
+                controllerId_ = null;
+                if (controllerIdBuilder_ != null) {
+                    controllerIdBuilder_.dispose();
                     controllerIdBuilder_ = null;
                 }
                 return this;
@@ -16030,80 +16196,60 @@ public final class ContextOuterClass {
             @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();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
-                result.deviceType_ = deviceType_;
-                if (deviceConfigBuilder_ == null) {
-                    result.deviceConfig_ = deviceConfig_;
-                } else {
-                    result.deviceConfig_ = deviceConfigBuilder_.build();
-                }
-                result.deviceOperationalStatus_ = deviceOperationalStatus_;
-                if (((bitField0_ & 0x00000001) != 0)) {
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Device result) {
+                if (((bitField0_ & 0x00000020) != 0)) {
                     deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000020);
                 }
                 result.deviceDrivers_ = deviceDrivers_;
                 if (deviceEndpointsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000040) != 0)) {
                         deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000040);
                     }
                     result.deviceEndpoints_ = deviceEndpoints_;
                 } else {
                     result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
                 }
                 if (componentsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0)) {
+                    if (((bitField0_ & 0x00000080) != 0)) {
                         components_ = java.util.Collections.unmodifiableList(components_);
-                        bitField0_ = (bitField0_ & ~0x00000004);
+                        bitField0_ = (bitField0_ & ~0x00000080);
                     }
                     result.components_ = components_;
                 } else {
                     result.components_ = componentsBuilder_.build();
                 }
-                if (controllerIdBuilder_ == null) {
-                    result.controllerId_ = controllerId_;
-                } else {
-                    result.controllerId_ = controllerIdBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.Device result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.deviceType_ = deviceType_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.deviceConfig_ = deviceConfigBuilder_ == null ? deviceConfig_ : deviceConfigBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.deviceOperationalStatus_ = deviceOperationalStatus_;
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.controllerId_ = controllerIdBuilder_ == null ? controllerId_ : controllerIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -16124,10 +16270,12 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getDeviceType().isEmpty()) {
                     deviceType_ = other.deviceType_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (other.hasDeviceConfig()) {
@@ -16139,7 +16287,7 @@ public final class ContextOuterClass {
                 if (!other.deviceDrivers_.isEmpty()) {
                     if (deviceDrivers_.isEmpty()) {
                         deviceDrivers_ = other.deviceDrivers_;
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000020);
                     } else {
                         ensureDeviceDriversIsMutable();
                         deviceDrivers_.addAll(other.deviceDrivers_);
@@ -16150,7 +16298,7 @@ public final class ContextOuterClass {
                     if (!other.deviceEndpoints_.isEmpty()) {
                         if (deviceEndpoints_.isEmpty()) {
                             deviceEndpoints_ = other.deviceEndpoints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000040);
                         } else {
                             ensureDeviceEndpointsIsMutable();
                             deviceEndpoints_.addAll(other.deviceEndpoints_);
@@ -16163,7 +16311,7 @@ public final class ContextOuterClass {
                             deviceEndpointsBuilder_.dispose();
                             deviceEndpointsBuilder_ = null;
                             deviceEndpoints_ = other.deviceEndpoints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000040);
                             deviceEndpointsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDeviceEndpointsFieldBuilder() : null;
                         } else {
                             deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
@@ -16174,7 +16322,7 @@ public final class ContextOuterClass {
                     if (!other.components_.isEmpty()) {
                         if (components_.isEmpty()) {
                             components_ = other.components_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000080);
                         } else {
                             ensureComponentsIsMutable();
                             components_.addAll(other.components_);
@@ -16187,7 +16335,7 @@ public final class ContextOuterClass {
                             componentsBuilder_.dispose();
                             componentsBuilder_ = null;
                             components_ = other.components_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000080);
                             componentsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getComponentsFieldBuilder() : null;
                         } else {
                             componentsBuilder_.addAllMessages(other.components_);
@@ -16197,7 +16345,7 @@ public final class ContextOuterClass {
                 if (other.hasControllerId()) {
                     mergeControllerId(other.getControllerId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -16209,17 +16357,122 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    deviceType_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    input.readMessage(getDeviceConfigFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 40:
+                                {
+                                    deviceOperationalStatus_ = input.readEnum();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            case 48:
+                                {
+                                    int tmpRaw = input.readEnum();
+                                    ensureDeviceDriversIsMutable();
+                                    deviceDrivers_.add(tmpRaw);
+                                    break;
+                                }
+                            // case 48
+                            case 50:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int oldLimit = input.pushLimit(length);
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        int tmpRaw = input.readEnum();
+                                        ensureDeviceDriversIsMutable();
+                                        deviceDrivers_.add(tmpRaw);
+                                    }
+                                    input.popLimit(oldLimit);
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    context.ContextOuterClass.EndPoint m = input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry);
+                                    if (deviceEndpointsBuilder_ == null) {
+                                        ensureDeviceEndpointsIsMutable();
+                                        deviceEndpoints_.add(m);
+                                    } else {
+                                        deviceEndpointsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    context.ContextOuterClass.Component m = input.readMessage(context.ContextOuterClass.Component.parser(), extensionRegistry);
+                                    if (componentsBuilder_ == null) {
+                                        ensureComponentsIsMutable();
+                                        components_.add(m);
+                                    } else {
+                                        componentsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    input.readMessage(getControllerIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -16234,7 +16487,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceId field is set.
              */
             public boolean hasDeviceId() {
-                return deviceIdBuilder_ != null || deviceId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -16258,10 +16511,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceId_ = value;
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -16271,10 +16525,11 @@ public final class ContextOuterClass {
             public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (deviceIdBuilder_ == null) {
                     deviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -16283,15 +16538,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
                 if (deviceIdBuilder_ == null) {
-                    if (deviceId_ != null) {
-                        deviceId_ = context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
                         deviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -16299,13 +16555,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 1;</code>
              */
             public Builder clearDeviceId() {
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                    onChanged();
-                } else {
-                    deviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -16313,6 +16569,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 1;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDeviceIdFieldBuilder().getBuilder();
             }
@@ -16382,6 +16639,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -16392,6 +16650,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -16407,6 +16666,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -16454,6 +16714,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 deviceType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -16464,6 +16725,7 @@ public final class ContextOuterClass {
              */
             public Builder clearDeviceType() {
                 deviceType_ = getDefaultInstance().getDeviceType();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -16479,6 +16741,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 deviceType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -16492,7 +16755,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceConfig field is set.
              */
             public boolean hasDeviceConfig() {
-                return deviceConfigBuilder_ != null || deviceConfig_ != null;
+                return ((bitField0_ & 0x00000008) != 0);
             }
 
             /**
@@ -16516,10 +16779,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceConfig_ = value;
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -16529,10 +16793,11 @@ public final class ContextOuterClass {
             public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
                 if (deviceConfigBuilder_ == null) {
                     deviceConfig_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -16541,15 +16806,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
                 if (deviceConfigBuilder_ == null) {
-                    if (deviceConfig_ != null) {
-                        deviceConfig_ = context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000008) != 0) && deviceConfig_ != null && deviceConfig_ != context.ContextOuterClass.DeviceConfig.getDefaultInstance()) {
+                        getDeviceConfigBuilder().mergeFrom(value);
                     } else {
                         deviceConfig_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -16557,13 +16823,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceConfig device_config = 4;</code>
              */
             public Builder clearDeviceConfig() {
-                if (deviceConfigBuilder_ == null) {
-                    deviceConfig_ = null;
-                    onChanged();
-                } else {
-                    deviceConfig_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                deviceConfig_ = null;
+                if (deviceConfigBuilder_ != null) {
+                    deviceConfigBuilder_.dispose();
                     deviceConfigBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -16571,6 +16837,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceConfig device_config = 4;</code>
              */
             public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return getDeviceConfigFieldBuilder().getBuilder();
             }
@@ -16615,6 +16882,7 @@ public final class ContextOuterClass {
              */
             public Builder setDeviceOperationalStatusValue(int value) {
                 deviceOperationalStatus_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -16625,8 +16893,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+                context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.forNumber(deviceOperationalStatus_);
                 return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
             }
 
@@ -16639,6 +16906,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000010;
                 deviceOperationalStatus_ = value.getNumber();
                 onChanged();
                 return this;
@@ -16649,6 +16917,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearDeviceOperationalStatus() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 deviceOperationalStatus_ = 0;
                 onChanged();
                 return this;
@@ -16657,9 +16926,9 @@ public final class ContextOuterClass {
             private java.util.List<java.lang.Integer> deviceDrivers_ = java.util.Collections.emptyList();
 
             private void ensureDeviceDriversIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000020) != 0)) {
                     deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000020;
                 }
             }
 
@@ -16739,7 +17008,7 @@ public final class ContextOuterClass {
              */
             public Builder clearDeviceDrivers() {
                 deviceDrivers_ = java.util.Collections.emptyList();
-                bitField0_ = (bitField0_ & ~0x00000001);
+                bitField0_ = (bitField0_ & ~0x00000020);
                 onChanged();
                 return this;
             }
@@ -16763,8 +17032,8 @@ public final class ContextOuterClass {
 
             /**
              * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
-             * @param index The index of the value to return.
-             * @return The enum numeric value on the wire of deviceDrivers at the given index.
+             * @param index The index to set the value at.
+             * @param value The enum numeric value on the wire for deviceDrivers to set.
              * @return This builder for chaining.
              */
             public Builder setDeviceDriversValue(int index, int value) {
@@ -16803,9 +17072,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ = java.util.Collections.emptyList();
 
             private void ensureDeviceEndpointsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000040) != 0)) {
                     deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000040;
                 }
             }
 
@@ -16957,7 +17226,7 @@ public final class ContextOuterClass {
             public Builder clearDeviceEndpoints() {
                 if (deviceEndpointsBuilder_ == null) {
                     deviceEndpoints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000040);
                     onChanged();
                 } else {
                     deviceEndpointsBuilder_.clear();
@@ -17031,7 +17300,7 @@ public final class ContextOuterClass {
 
             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());
+                    deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(deviceEndpoints_, ((bitField0_ & 0x00000040) != 0), getParentForChildren(), isClean());
                     deviceEndpoints_ = null;
                 }
                 return deviceEndpointsBuilder_;
@@ -17040,9 +17309,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.Component> components_ = java.util.Collections.emptyList();
 
             private void ensureComponentsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
+                if (!((bitField0_ & 0x00000080) != 0)) {
                     components_ = new java.util.ArrayList<context.ContextOuterClass.Component>(components_);
-                    bitField0_ |= 0x00000004;
+                    bitField0_ |= 0x00000080;
                 }
             }
 
@@ -17238,7 +17507,7 @@ public final class ContextOuterClass {
             public Builder clearComponents() {
                 if (componentsBuilder_ == null) {
                     components_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
+                    bitField0_ = (bitField0_ & ~0x00000080);
                     onChanged();
                 } else {
                     componentsBuilder_.clear();
@@ -17340,7 +17609,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder> getComponentsFieldBuilder() {
                 if (componentsBuilder_ == null) {
-                    componentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder>(components_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
+                    componentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder>(components_, ((bitField0_ & 0x00000080) != 0), getParentForChildren(), isClean());
                     components_ = null;
                 }
                 return componentsBuilder_;
@@ -17359,7 +17628,7 @@ public final class ContextOuterClass {
              * @return Whether the controllerId field is set.
              */
             public boolean hasControllerId() {
-                return controllerIdBuilder_ != null || controllerId_ != null;
+                return ((bitField0_ & 0x00000100) != 0);
             }
 
             /**
@@ -17391,10 +17660,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     controllerId_ = value;
-                    onChanged();
                 } else {
                     controllerIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -17408,10 +17678,11 @@ public final class ContextOuterClass {
             public Builder setControllerId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (controllerIdBuilder_ == null) {
                     controllerId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     controllerIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -17424,15 +17695,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeControllerId(context.ContextOuterClass.DeviceId value) {
                 if (controllerIdBuilder_ == null) {
-                    if (controllerId_ != null) {
-                        controllerId_ = context.ContextOuterClass.DeviceId.newBuilder(controllerId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000100) != 0) && controllerId_ != null && controllerId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getControllerIdBuilder().mergeFrom(value);
                     } else {
                         controllerId_ = value;
                     }
-                    onChanged();
                 } else {
                     controllerIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -17444,13 +17716,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId controller_id = 9;</code>
              */
             public Builder clearControllerId() {
-                if (controllerIdBuilder_ == null) {
-                    controllerId_ = null;
-                    onChanged();
-                } else {
-                    controllerId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000100);
+                controllerId_ = null;
+                if (controllerIdBuilder_ != null) {
+                    controllerIdBuilder_.dispose();
                     controllerIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -17462,6 +17734,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId controller_id = 9;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getControllerIdBuilder() {
+                bitField0_ |= 0x00000100;
                 onChanged();
                 return getControllerIdFieldBuilder().getBuilder();
             }
@@ -17523,7 +17796,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -17626,7 +17909,9 @@ public final class ContextOuterClass {
          *
          * <code>map&lt;string, string&gt; attributes = 4;</code>
          */
-        java.lang.String getAttributesOrDefault(java.lang.String key, java.lang.String defaultValue);
+        /* nullable */
+        java.lang.String getAttributesOrDefault(java.lang.String key, /* nullable */
+        java.lang.String defaultValue);
 
         /**
          * <pre>
@@ -17679,86 +17964,6 @@ public final class ContextOuterClass {
             return new Component();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Component(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.Uuid.Builder subBuilder = null;
-                                if (componentUuid_ != null) {
-                                    subBuilder = componentUuid_.toBuilder();
-                                }
-                                componentUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(componentUuid_);
-                                    componentUuid_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                type_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    attributes_ = com.google.protobuf.MapField.newMapField(AttributesDefaultEntryHolder.defaultEntry);
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                com.google.protobuf.MapEntry<java.lang.String, java.lang.String> attributes__ = input.readMessage(AttributesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
-                                attributes_.getMutableMap().put(attributes__.getKey(), attributes__.getValue());
-                                break;
-                            }
-                        case 42:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                parent_ = 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_Component_descriptor;
         }
@@ -17806,12 +18011,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getComponentUuidOrBuilder() {
-            return getComponentUuid();
+            return componentUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : componentUuid_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -17848,7 +18054,8 @@ public final class ContextOuterClass {
 
         public static final int TYPE_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object type_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object type_ = "";
 
         /**
          * <code>string type = 3;</code>
@@ -17890,6 +18097,7 @@ public final class ContextOuterClass {
             static final com.google.protobuf.MapEntry<java.lang.String, java.lang.String> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.String>newDefaultInstance(context.ContextOuterClass.internal_static_context_Component_AttributesEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.STRING, "");
         }
 
+        @SuppressWarnings("serial")
         private com.google.protobuf.MapField<java.lang.String, java.lang.String> attributes_;
 
         private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetAttributes() {
@@ -17913,7 +18121,7 @@ public final class ContextOuterClass {
         @java.lang.Override
         public boolean containsAttributes(java.lang.String key) {
             if (key == null) {
-                throw new java.lang.NullPointerException();
+                throw new NullPointerException("map key");
             }
             return internalGetAttributes().getMap().containsKey(key);
         }
@@ -17947,9 +18155,11 @@ public final class ContextOuterClass {
          * <code>map&lt;string, string&gt; attributes = 4;</code>
          */
         @java.lang.Override
-        public java.lang.String getAttributesOrDefault(java.lang.String key, java.lang.String defaultValue) {
+        public /* nullable */
+        java.lang.String getAttributesOrDefault(java.lang.String key, /* nullable */
+        java.lang.String defaultValue) {
             if (key == null) {
-                throw new java.lang.NullPointerException();
+                throw new NullPointerException("map key");
             }
             java.util.Map<java.lang.String, java.lang.String> map = internalGetAttributes().getMap();
             return map.containsKey(key) ? map.get(key) : defaultValue;
@@ -17965,7 +18175,7 @@ public final class ContextOuterClass {
         @java.lang.Override
         public java.lang.String getAttributesOrThrow(java.lang.String key) {
             if (key == null) {
-                throw new java.lang.NullPointerException();
+                throw new NullPointerException("map key");
             }
             java.util.Map<java.lang.String, java.lang.String> map = internalGetAttributes().getMap();
             if (!map.containsKey(key)) {
@@ -17976,7 +18186,8 @@ public final class ContextOuterClass {
 
         public static final int PARENT_FIELD_NUMBER = 5;
 
-        private volatile java.lang.Object parent_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object parent_ = "";
 
         /**
          * <code>string parent = 5;</code>
@@ -18029,17 +18240,17 @@ public final class ContextOuterClass {
             if (componentUuid_ != null) {
                 output.writeMessage(1, getComponentUuid());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
-            if (!getTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, type_);
             }
             com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetAttributes(), AttributesDefaultEntryHolder.defaultEntry, 4);
-            if (!getParentBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 5, parent_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -18051,20 +18262,20 @@ public final class ContextOuterClass {
             if (componentUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getComponentUuid());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
-            if (!getTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(type_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, type_);
             }
             for (java.util.Map.Entry<java.lang.String, java.lang.String> entry : internalGetAttributes().getMap().entrySet()) {
                 com.google.protobuf.MapEntry<java.lang.String, java.lang.String> attributes__ = AttributesDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, attributes__);
             }
-            if (!getParentBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parent_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, parent_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -18092,7 +18303,7 @@ public final class ContextOuterClass {
                 return false;
             if (!getParent().equals(other.getParent()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -18118,7 +18329,7 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + PARENT_FIELD_NUMBER;
             hash = (53 * hash) + getParent().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -18236,26 +18447,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Component.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 (componentUuidBuilder_ == null) {
-                    componentUuid_ = null;
-                } else {
-                    componentUuid_ = null;
+                bitField0_ = 0;
+                componentUuid_ = null;
+                if (componentUuidBuilder_ != null) {
+                    componentUuidBuilder_.dispose();
                     componentUuidBuilder_ = null;
                 }
                 name_ = "";
@@ -18287,49 +18491,31 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Component buildPartial() {
                 context.ContextOuterClass.Component result = new context.ContextOuterClass.Component(this);
-                int from_bitField0_ = bitField0_;
-                if (componentUuidBuilder_ == null) {
-                    result.componentUuid_ = componentUuid_;
-                } else {
-                    result.componentUuid_ = componentUuidBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
-                result.type_ = type_;
-                result.attributes_ = internalGetAttributes();
-                result.attributes_.makeImmutable();
-                result.parent_ = parent_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.Component result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.componentUuid_ = componentUuidBuilder_ == null ? componentUuid_ : componentUuidBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.type_ = type_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.attributes_ = internalGetAttributes();
+                    result.attributes_.makeImmutable();
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.parent_ = parent_;
+                }
             }
 
             @java.lang.Override
@@ -18350,18 +18536,22 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getType().isEmpty()) {
                     type_ = other.type_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 internalGetMutableAttributes().mergeFrom(other.internalGetAttributes());
+                bitField0_ |= 0x00000008;
                 if (!other.getParent().isEmpty()) {
                     parent_ = other.parent_;
+                    bitField0_ |= 0x00000010;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -18373,17 +18563,71 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Component parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getComponentUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    type_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.String> attributes__ = input.readMessage(AttributesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableAttributes().getMutableMap().put(attributes__.getKey(), attributes__.getValue());
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    parent_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Component) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -18398,7 +18642,7 @@ public final class ContextOuterClass {
              * @return Whether the componentUuid field is set.
              */
             public boolean hasComponentUuid() {
-                return componentUuidBuilder_ != null || componentUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -18422,10 +18666,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     componentUuid_ = value;
-                    onChanged();
                 } else {
                     componentUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18435,10 +18680,11 @@ public final class ContextOuterClass {
             public Builder setComponentUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (componentUuidBuilder_ == null) {
                     componentUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     componentUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18447,15 +18693,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeComponentUuid(context.ContextOuterClass.Uuid value) {
                 if (componentUuidBuilder_ == null) {
-                    if (componentUuid_ != null) {
-                        componentUuid_ = context.ContextOuterClass.Uuid.newBuilder(componentUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && componentUuid_ != null && componentUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getComponentUuidBuilder().mergeFrom(value);
                     } else {
                         componentUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     componentUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18463,13 +18710,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid component_uuid = 1;</code>
              */
             public Builder clearComponentUuid() {
-                if (componentUuidBuilder_ == null) {
-                    componentUuid_ = null;
-                    onChanged();
-                } else {
-                    componentUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                componentUuid_ = null;
+                if (componentUuidBuilder_ != null) {
+                    componentUuidBuilder_.dispose();
                     componentUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -18477,6 +18724,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid component_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getComponentUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getComponentUuidFieldBuilder().getBuilder();
             }
@@ -18546,6 +18794,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -18556,6 +18805,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -18571,6 +18821,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -18618,6 +18869,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 type_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -18628,6 +18880,7 @@ public final class ContextOuterClass {
              */
             public Builder clearType() {
                 type_ = getDefaultInstance().getType();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -18643,6 +18896,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 type_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -18657,14 +18911,14 @@ public final class ContextOuterClass {
             }
 
             private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetMutableAttributes() {
-                onChanged();
-                ;
                 if (attributes_ == null) {
                     attributes_ = com.google.protobuf.MapField.newMapField(AttributesDefaultEntryHolder.defaultEntry);
                 }
                 if (!attributes_.isMutable()) {
                     attributes_ = attributes_.copy();
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return attributes_;
             }
 
@@ -18682,7 +18936,7 @@ public final class ContextOuterClass {
             @java.lang.Override
             public boolean containsAttributes(java.lang.String key) {
                 if (key == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map key");
                 }
                 return internalGetAttributes().getMap().containsKey(key);
             }
@@ -18716,9 +18970,11 @@ public final class ContextOuterClass {
              * <code>map&lt;string, string&gt; attributes = 4;</code>
              */
             @java.lang.Override
-            public java.lang.String getAttributesOrDefault(java.lang.String key, java.lang.String defaultValue) {
+            public /* nullable */
+            java.lang.String getAttributesOrDefault(java.lang.String key, /* nullable */
+            java.lang.String defaultValue) {
                 if (key == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map key");
                 }
                 java.util.Map<java.lang.String, java.lang.String> map = internalGetAttributes().getMap();
                 return map.containsKey(key) ? map.get(key) : defaultValue;
@@ -18734,7 +18990,7 @@ public final class ContextOuterClass {
             @java.lang.Override
             public java.lang.String getAttributesOrThrow(java.lang.String key) {
                 if (key == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map key");
                 }
                 java.util.Map<java.lang.String, java.lang.String> map = internalGetAttributes().getMap();
                 if (!map.containsKey(key)) {
@@ -18744,6 +19000,7 @@ public final class ContextOuterClass {
             }
 
             public Builder clearAttributes() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 internalGetMutableAttributes().getMutableMap().clear();
                 return this;
             }
@@ -18757,7 +19014,7 @@ public final class ContextOuterClass {
              */
             public Builder removeAttributes(java.lang.String key) {
                 if (key == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map key");
                 }
                 internalGetMutableAttributes().getMutableMap().remove(key);
                 return this;
@@ -18768,6 +19025,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Deprecated
             public java.util.Map<java.lang.String, java.lang.String> getMutableAttributes() {
+                bitField0_ |= 0x00000008;
                 return internalGetMutableAttributes().getMutableMap();
             }
 
@@ -18780,12 +19038,13 @@ public final class ContextOuterClass {
              */
             public Builder putAttributes(java.lang.String key, java.lang.String value) {
                 if (key == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map key");
                 }
                 if (value == null) {
-                    throw new java.lang.NullPointerException();
+                    throw new NullPointerException("map value");
                 }
                 internalGetMutableAttributes().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000008;
                 return this;
             }
 
@@ -18798,6 +19057,7 @@ public final class ContextOuterClass {
              */
             public Builder putAllAttributes(java.util.Map<java.lang.String, java.lang.String> values) {
                 internalGetMutableAttributes().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000008;
                 return this;
             }
 
@@ -18844,6 +19104,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 parent_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -18854,6 +19115,7 @@ public final class ContextOuterClass {
              */
             public Builder clearParent() {
                 parent_ = getDefaultInstance().getParent();
+                bitField0_ = (bitField0_ & ~0x00000010);
                 onChanged();
                 return this;
             }
@@ -18869,6 +19131,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 parent_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -18900,7 +19163,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Component parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Component(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -18971,57 +19244,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -19033,6 +19255,7 @@ public final class ContextOuterClass {
 
         public static final int CONFIG_RULES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
 
         /**
@@ -19093,7 +19316,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 output.writeMessage(1, configRules_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -19105,7 +19328,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, configRules_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -19121,7 +19344,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
             if (!getConfigRulesList().equals(other.getConfigRulesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -19137,7 +19360,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
                 hash = (53 * hash) + getConfigRulesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -19231,29 +19454,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (configRulesBuilder_ == null) {
                     configRules_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    configRules_ = null;
                     configRulesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -19279,7 +19496,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.DeviceConfig buildPartial() {
                 context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.DeviceConfig result) {
                 if (configRulesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         configRules_ = java.util.Collections.unmodifiableList(configRules_);
@@ -19289,38 +19514,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceConfig result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -19360,7 +19557,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -19372,17 +19569,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ConfigRule m = input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry);
+                                    if (configRulesBuilder_ == null) {
+                                        ensureConfigRulesIsMutable();
+                                        configRules_.add(m);
+                                    } else {
+                                        configRulesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -19652,7 +19879,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -19723,57 +19960,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -19785,6 +19971,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICE_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
 
         /**
@@ -19845,7 +20032,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < deviceIds_.size(); i++) {
                 output.writeMessage(1, deviceIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -19857,7 +20044,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < deviceIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, deviceIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -19873,7 +20060,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
             if (!getDeviceIdsList().equals(other.getDeviceIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -19889,7 +20076,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getDeviceIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -19983,29 +20170,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    deviceIds_ = null;
                     deviceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -20031,7 +20212,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.DeviceIdList buildPartial() {
                 context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.DeviceIdList result) {
                 if (deviceIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
@@ -20041,38 +20230,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -20112,7 +20273,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -20124,17 +20285,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.DeviceId m = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+                                    if (deviceIdsBuilder_ == null) {
+                                        ensureDeviceIdsIsMutable();
+                                        deviceIds_.add(m);
+                                    } else {
+                                        deviceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -20404,7 +20595,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -20475,57 +20676,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -20537,6 +20687,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Device> devices_;
 
         /**
@@ -20597,7 +20748,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < devices_.size(); i++) {
                 output.writeMessage(1, devices_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -20609,7 +20760,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < devices_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, devices_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -20625,7 +20776,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
             if (!getDevicesList().equals(other.getDevicesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -20641,7 +20792,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + DEVICES_FIELD_NUMBER;
                 hash = (53 * hash) + getDevicesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -20735,29 +20886,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (devicesBuilder_ == null) {
                     devices_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    devices_ = null;
                     devicesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -20783,7 +20928,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.DeviceList buildPartial() {
                 context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.DeviceList result) {
                 if (devicesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         devices_ = java.util.Collections.unmodifiableList(devices_);
@@ -20793,38 +20946,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -20864,7 +20989,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -20876,17 +21001,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Device m = input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry);
+                                    if (devicesBuilder_ == null) {
+                                        ensureDevicesIsMutable();
+                                        devices_.add(m);
+                                    } else {
+                                        devicesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -21156,7 +21311,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -21236,72 +21401,6 @@ public final class ContextOuterClass {
             return new DeviceFilter();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceFilter(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.DeviceIdList.Builder subBuilder = null;
-                                if (deviceIds_ != null) {
-                                    subBuilder = deviceIds_.toBuilder();
-                                }
-                                deviceIds_ = input.readMessage(context.ContextOuterClass.DeviceIdList.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(deviceIds_);
-                                    deviceIds_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 16:
-                            {
-                                includeEndpoints_ = input.readBool();
-                                break;
-                            }
-                        case 24:
-                            {
-                                includeConfigRules_ = input.readBool();
-                                break;
-                            }
-                        case 32:
-                            {
-                                includeComponents_ = 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_DeviceFilter_descriptor;
         }
@@ -21338,12 +21437,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdListOrBuilder getDeviceIdsOrBuilder() {
-            return getDeviceIds();
+            return deviceIds_ == null ? context.ContextOuterClass.DeviceIdList.getDefaultInstance() : deviceIds_;
         }
 
         public static final int INCLUDE_ENDPOINTS_FIELD_NUMBER = 2;
 
-        private boolean includeEndpoints_;
+        private boolean includeEndpoints_ = false;
 
         /**
          * <code>bool include_endpoints = 2;</code>
@@ -21356,7 +21455,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 3;
 
-        private boolean includeConfigRules_;
+        private boolean includeConfigRules_ = false;
 
         /**
          * <code>bool include_config_rules = 3;</code>
@@ -21369,7 +21468,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_COMPONENTS_FIELD_NUMBER = 4;
 
-        private boolean includeComponents_;
+        private boolean includeComponents_ = false;
 
         /**
          * <code>bool include_components = 4;</code>
@@ -21407,7 +21506,7 @@ public final class ContextOuterClass {
             if (includeComponents_ != false) {
                 output.writeBool(4, includeComponents_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -21428,7 +21527,7 @@ public final class ContextOuterClass {
             if (includeComponents_ != false) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, includeComponents_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -21454,7 +21553,7 @@ public final class ContextOuterClass {
                 return false;
             if (getIncludeComponents() != other.getIncludeComponents())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -21476,7 +21575,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeConfigRules());
             hash = (37 * hash) + INCLUDE_COMPONENTS_FIELD_NUMBER;
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeComponents());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -21570,26 +21669,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.DeviceFilter.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 (deviceIdsBuilder_ == null) {
-                    deviceIds_ = null;
-                } else {
-                    deviceIds_ = null;
+                bitField0_ = 0;
+                deviceIds_ = null;
+                if (deviceIdsBuilder_ != null) {
+                    deviceIdsBuilder_.dispose();
                     deviceIdsBuilder_ = null;
                 }
                 includeEndpoints_ = false;
@@ -21620,46 +21712,27 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.DeviceFilter buildPartial() {
                 context.ContextOuterClass.DeviceFilter result = new context.ContextOuterClass.DeviceFilter(this);
-                if (deviceIdsBuilder_ == null) {
-                    result.deviceIds_ = deviceIds_;
-                } else {
-                    result.deviceIds_ = deviceIdsBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.includeEndpoints_ = includeEndpoints_;
-                result.includeConfigRules_ = includeConfigRules_;
-                result.includeComponents_ = includeComponents_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceFilter result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.deviceIds_ = deviceIdsBuilder_ == null ? deviceIds_ : deviceIdsBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.includeEndpoints_ = includeEndpoints_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.includeConfigRules_ = includeConfigRules_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.includeComponents_ = includeComponents_;
+                }
             }
 
             @java.lang.Override
@@ -21687,7 +21760,7 @@ public final class ContextOuterClass {
                 if (other.getIncludeComponents() != false) {
                     setIncludeComponents(other.getIncludeComponents());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -21699,20 +21772,68 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.DeviceFilter parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDeviceIdsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    includeEndpoints_ = input.readBool();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 24:
+                                {
+                                    includeConfigRules_ = input.readBool();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    includeComponents_ = input.readBool();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceFilter) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.DeviceIdList deviceIds_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.DeviceIdList, context.ContextOuterClass.DeviceIdList.Builder, context.ContextOuterClass.DeviceIdListOrBuilder> deviceIdsBuilder_;
@@ -21722,7 +21843,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceIds field is set.
              */
             public boolean hasDeviceIds() {
-                return deviceIdsBuilder_ != null || deviceIds_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -21746,10 +21867,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceIds_ = value;
-                    onChanged();
                 } else {
                     deviceIdsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -21759,10 +21881,11 @@ public final class ContextOuterClass {
             public Builder setDeviceIds(context.ContextOuterClass.DeviceIdList.Builder builderForValue) {
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceIdsBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -21771,15 +21894,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceIds(context.ContextOuterClass.DeviceIdList value) {
                 if (deviceIdsBuilder_ == null) {
-                    if (deviceIds_ != null) {
-                        deviceIds_ = context.ContextOuterClass.DeviceIdList.newBuilder(deviceIds_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && deviceIds_ != null && deviceIds_ != context.ContextOuterClass.DeviceIdList.getDefaultInstance()) {
+                        getDeviceIdsBuilder().mergeFrom(value);
                     } else {
                         deviceIds_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceIdsBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -21787,13 +21911,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceIdList device_ids = 1;</code>
              */
             public Builder clearDeviceIds() {
-                if (deviceIdsBuilder_ == null) {
-                    deviceIds_ = null;
-                    onChanged();
-                } else {
-                    deviceIds_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                deviceIds_ = null;
+                if (deviceIdsBuilder_ != null) {
+                    deviceIdsBuilder_.dispose();
                     deviceIdsBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -21801,6 +21925,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceIdList device_ids = 1;</code>
              */
             public context.ContextOuterClass.DeviceIdList.Builder getDeviceIdsBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDeviceIdsFieldBuilder().getBuilder();
             }
@@ -21845,6 +21970,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeEndpoints(boolean value) {
                 includeEndpoints_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -21854,6 +21980,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeEndpoints() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 includeEndpoints_ = false;
                 onChanged();
                 return this;
@@ -21877,6 +22004,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeConfigRules(boolean value) {
                 includeConfigRules_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -21886,6 +22014,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeConfigRules() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 includeConfigRules_ = false;
                 onChanged();
                 return this;
@@ -21909,6 +22038,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeComponents(boolean value) {
                 includeComponents_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -21918,6 +22048,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeComponents() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 includeComponents_ = false;
                 onChanged();
                 return this;
@@ -21950,7 +22081,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public DeviceFilter parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceFilter(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -22046,83 +22187,6 @@ public final class ContextOuterClass {
             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;
-                            }
-                        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;
-                            }
-                        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;
         }
@@ -22159,7 +22223,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int DEVICE_ID_FIELD_NUMBER = 2;
@@ -22189,7 +22253,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-            return getDeviceId();
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
         public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
@@ -22219,7 +22283,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-            return getDeviceConfig();
+            return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -22246,7 +22310,7 @@ public final class ContextOuterClass {
             if (deviceConfig_ != null) {
                 output.writeMessage(3, getDeviceConfig());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -22264,7 +22328,7 @@ public final class ContextOuterClass {
             if (deviceConfig_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getDeviceConfig());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -22296,7 +22360,7 @@ public final class ContextOuterClass {
                 if (!getDeviceConfig().equals(other.getDeviceConfig()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -22320,7 +22384,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
                 hash = (53 * hash) + getDeviceConfig().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -22414,38 +22478,29 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                } else {
-                    deviceId_ = null;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
-                if (deviceConfigBuilder_ == null) {
-                    deviceConfig_ = null;
-                } else {
-                    deviceConfig_ = null;
+                deviceConfig_ = null;
+                if (deviceConfigBuilder_ != null) {
+                    deviceConfigBuilder_.dispose();
                     deviceConfigBuilder_ = null;
                 }
                 return this;
@@ -22473,53 +22528,24 @@ public final class ContextOuterClass {
             @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();
-                }
-                if (deviceConfigBuilder_ == null) {
-                    result.deviceConfig_ = deviceConfig_;
-                } else {
-                    result.deviceConfig_ = deviceConfigBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.DeviceEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.deviceConfig_ = deviceConfigBuilder_ == null ? deviceConfig_ : deviceConfigBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -22544,7 +22570,7 @@ public final class ContextOuterClass {
                 if (other.hasDeviceConfig()) {
                     mergeDeviceConfig(other.getDeviceConfig());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -22556,20 +22582,61 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getDeviceConfigFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -22579,7 +22646,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -22603,10 +22670,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -22616,10 +22684,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -22628,15 +22697,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -22644,13 +22714,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -22658,6 +22728,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -22693,7 +22764,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceId field is set.
              */
             public boolean hasDeviceId() {
-                return deviceIdBuilder_ != null || deviceId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -22717,10 +22788,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceId_ = value;
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -22730,10 +22802,11 @@ public final class ContextOuterClass {
             public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (deviceIdBuilder_ == null) {
                     deviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -22742,15 +22815,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
                 if (deviceIdBuilder_ == null) {
-                    if (deviceId_ != null) {
-                        deviceId_ = context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
                         deviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -22758,13 +22832,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 2;</code>
              */
             public Builder clearDeviceId() {
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                    onChanged();
-                } else {
-                    deviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -22772,6 +22846,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 2;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getDeviceIdFieldBuilder().getBuilder();
             }
@@ -22807,7 +22882,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceConfig field is set.
              */
             public boolean hasDeviceConfig() {
-                return deviceConfigBuilder_ != null || deviceConfig_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -22831,10 +22906,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceConfig_ = value;
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -22844,10 +22920,11 @@ public final class ContextOuterClass {
             public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
                 if (deviceConfigBuilder_ == null) {
                     deviceConfig_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -22856,15 +22933,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
                 if (deviceConfigBuilder_ == null) {
-                    if (deviceConfig_ != null) {
-                        deviceConfig_ = context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && deviceConfig_ != null && deviceConfig_ != context.ContextOuterClass.DeviceConfig.getDefaultInstance()) {
+                        getDeviceConfigBuilder().mergeFrom(value);
                     } else {
                         deviceConfig_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceConfigBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -22872,13 +22950,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceConfig device_config = 3;</code>
              */
             public Builder clearDeviceConfig() {
-                if (deviceConfigBuilder_ == null) {
-                    deviceConfig_ = null;
-                    onChanged();
-                } else {
-                    deviceConfig_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                deviceConfig_ = null;
+                if (deviceConfigBuilder_ != null) {
+                    deviceConfigBuilder_.dispose();
                     deviceConfigBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -22886,6 +22964,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceConfig device_config = 3;</code>
              */
             public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getDeviceConfigFieldBuilder().getBuilder();
             }
@@ -22939,7 +23018,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -23005,57 +23094,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -23092,7 +23130,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-            return getLinkUuid();
+            return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -23113,7 +23151,7 @@ public final class ContextOuterClass {
             if (linkUuid_ != null) {
                 output.writeMessage(1, getLinkUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -23125,7 +23163,7 @@ public final class ContextOuterClass {
             if (linkUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getLinkUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -23145,7 +23183,7 @@ public final class ContextOuterClass {
                 if (!getLinkUuid().equals(other.getLinkUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -23161,7 +23199,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -23259,26 +23297,19 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                linkUuid_ = null;
+                if (linkUuidBuilder_ != null) {
+                    linkUuidBuilder_.dispose();
                     linkUuidBuilder_ = null;
                 }
                 return this;
@@ -23306,43 +23337,18 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.LinkId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.linkUuid_ = linkUuidBuilder_ == null ? linkUuid_ : linkUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -23361,7 +23367,7 @@ public final class ContextOuterClass {
                 if (other.hasLinkUuid()) {
                     mergeLinkUuid(other.getLinkUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -23373,20 +23379,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getLinkUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid linkUuid_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
@@ -23396,7 +23429,7 @@ public final class ContextOuterClass {
              * @return Whether the linkUuid field is set.
              */
             public boolean hasLinkUuid() {
-                return linkUuidBuilder_ != null || linkUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -23420,10 +23453,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     linkUuid_ = value;
-                    onChanged();
                 } else {
                     linkUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -23433,10 +23467,11 @@ public final class ContextOuterClass {
             public Builder setLinkUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (linkUuidBuilder_ == null) {
                     linkUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     linkUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -23445,15 +23480,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
                 if (linkUuidBuilder_ == null) {
-                    if (linkUuid_ != null) {
-                        linkUuid_ = context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && linkUuid_ != null && linkUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getLinkUuidBuilder().mergeFrom(value);
                     } else {
                         linkUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     linkUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -23461,13 +23497,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid link_uuid = 1;</code>
              */
             public Builder clearLinkUuid() {
-                if (linkUuidBuilder_ == null) {
-                    linkUuid_ = null;
-                    onChanged();
-                } else {
-                    linkUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                linkUuid_ = null;
+                if (linkUuidBuilder_ != null) {
+                    linkUuidBuilder_.dispose();
                     linkUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -23475,6 +23511,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid link_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getLinkUuidFieldBuilder().getBuilder();
             }
@@ -23528,7 +23565,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -23585,54 +23632,6 @@ public final class ContextOuterClass {
             return new LinkAttributes();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private LinkAttributes(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 13:
-                            {
-                                totalCapacityGbps_ = input.readFloat();
-                                break;
-                            }
-                        case 21:
-                            {
-                                usedCapacityGbps_ = input.readFloat();
-                                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_LinkAttributes_descriptor;
         }
@@ -23644,7 +23643,7 @@ public final class ContextOuterClass {
 
         public static final int TOTAL_CAPACITY_GBPS_FIELD_NUMBER = 1;
 
-        private float totalCapacityGbps_;
+        private float totalCapacityGbps_ = 0F;
 
         /**
          * <code>float total_capacity_gbps = 1;</code>
@@ -23657,7 +23656,7 @@ public final class ContextOuterClass {
 
         public static final int USED_CAPACITY_GBPS_FIELD_NUMBER = 2;
 
-        private float usedCapacityGbps_;
+        private float usedCapacityGbps_ = 0F;
 
         /**
          * <code>float used_capacity_gbps = 2;</code>
@@ -23683,13 +23682,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (totalCapacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(totalCapacityGbps_) != 0) {
                 output.writeFloat(1, totalCapacityGbps_);
             }
-            if (usedCapacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(usedCapacityGbps_) != 0) {
                 output.writeFloat(2, usedCapacityGbps_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -23698,13 +23697,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (totalCapacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(totalCapacityGbps_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, totalCapacityGbps_);
             }
-            if (usedCapacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(usedCapacityGbps_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, usedCapacityGbps_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -23722,7 +23721,7 @@ public final class ContextOuterClass {
                 return false;
             if (java.lang.Float.floatToIntBits(getUsedCapacityGbps()) != java.lang.Float.floatToIntBits(other.getUsedCapacityGbps()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -23738,7 +23737,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getTotalCapacityGbps());
             hash = (37 * hash) + USED_CAPACITY_GBPS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getUsedCapacityGbps());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -23832,22 +23831,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.LinkAttributes.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();
+                bitField0_ = 0;
                 totalCapacityGbps_ = 0F;
                 usedCapacityGbps_ = 0F;
                 return this;
@@ -23875,40 +23868,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.LinkAttributes buildPartial() {
                 context.ContextOuterClass.LinkAttributes result = new context.ContextOuterClass.LinkAttributes(this);
-                result.totalCapacityGbps_ = totalCapacityGbps_;
-                result.usedCapacityGbps_ = usedCapacityGbps_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.LinkAttributes result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.totalCapacityGbps_ = totalCapacityGbps_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.usedCapacityGbps_ = usedCapacityGbps_;
+                }
             }
 
             @java.lang.Override
@@ -23930,7 +23904,7 @@ public final class ContextOuterClass {
                 if (other.getUsedCapacityGbps() != 0F) {
                     setUsedCapacityGbps(other.getUsedCapacityGbps());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -23942,20 +23916,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.LinkAttributes parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    totalCapacityGbps_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            case 21:
+                                {
+                                    usedCapacityGbps_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.LinkAttributes) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private float totalCapacityGbps_;
 
             /**
@@ -23974,6 +23982,7 @@ public final class ContextOuterClass {
              */
             public Builder setTotalCapacityGbps(float value) {
                 totalCapacityGbps_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -23983,6 +23992,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearTotalCapacityGbps() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 totalCapacityGbps_ = 0F;
                 onChanged();
                 return this;
@@ -24006,6 +24016,7 @@ public final class ContextOuterClass {
              */
             public Builder setUsedCapacityGbps(float value) {
                 usedCapacityGbps_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -24015,6 +24026,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearUsedCapacityGbps() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 usedCapacityGbps_ = 0F;
                 onChanged();
                 return this;
@@ -24047,7 +24059,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public LinkAttributes parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new LinkAttributes(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -24099,44 +24121,56 @@ public final class ContextOuterClass {
         com.google.protobuf.ByteString getNameBytes();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The enum numeric value on the wire for linkType.
+         */
+        int getLinkTypeValue();
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The linkType.
+         */
+        context.ContextOuterClass.LinkTypeEnum getLinkType();
+
+        /**
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         int getLinkEndpointIdsCount();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList();
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index);
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return Whether the attributes field is set.
          */
         boolean hasAttributes();
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return The attributes.
          */
         context.ContextOuterClass.LinkAttributes getAttributes();
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          */
         context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder();
     }
@@ -24156,6 +24190,7 @@ public final class ContextOuterClass {
 
         private Link() {
             name_ = "";
+            linkType_ = 0;
             linkEndpointIds_ = java.util.Collections.emptyList();
         }
 
@@ -24165,89 +24200,6 @@ public final class ContextOuterClass {
             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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                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;
-                            }
-                        case 34:
-                            {
-                                context.ContextOuterClass.LinkAttributes.Builder subBuilder = null;
-                                if (attributes_ != null) {
-                                    subBuilder = attributes_.toBuilder();
-                                }
-                                attributes_ = input.readMessage(context.ContextOuterClass.LinkAttributes.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(attributes_);
-                                    attributes_ = 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)) {
-                    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;
         }
@@ -24284,12 +24236,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-            return getLinkId();
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -24324,12 +24277,36 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 3;
+        public static final int LINK_TYPE_FIELD_NUMBER = 3;
 
+        private int linkType_ = 0;
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The enum numeric value on the wire for linkType.
+         */
+        @java.lang.Override
+        public int getLinkTypeValue() {
+            return linkType_;
+        }
+
+        /**
+         * <code>.context.LinkTypeEnum link_type = 3;</code>
+         * @return The linkType.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkTypeEnum getLinkType() {
+            context.ContextOuterClass.LinkTypeEnum result = context.ContextOuterClass.LinkTypeEnum.forNumber(linkType_);
+            return result == null ? context.ContextOuterClass.LinkTypeEnum.UNRECOGNIZED : result;
+        }
+
+        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
@@ -24337,7 +24314,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
@@ -24345,7 +24322,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public int getLinkEndpointIdsCount() {
@@ -24353,7 +24330,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
@@ -24361,19 +24338,19 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
             return linkEndpointIds_.get(index);
         }
 
-        public static final int ATTRIBUTES_FIELD_NUMBER = 4;
+        public static final int ATTRIBUTES_FIELD_NUMBER = 5;
 
         private context.ContextOuterClass.LinkAttributes attributes_;
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return Whether the attributes field is set.
          */
         @java.lang.Override
@@ -24382,7 +24359,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          * @return The attributes.
          */
         @java.lang.Override
@@ -24391,11 +24368,11 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>.context.LinkAttributes attributes = 4;</code>
+         * <code>.context.LinkAttributes attributes = 5;</code>
          */
         @java.lang.Override
         public context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder() {
-            return getAttributes();
+            return attributes_ == null ? context.ContextOuterClass.LinkAttributes.getDefaultInstance() : attributes_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -24416,16 +24393,19 @@ public final class ContextOuterClass {
             if (linkId_ != null) {
                 output.writeMessage(1, getLinkId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
+            if (linkType_ != context.ContextOuterClass.LinkTypeEnum.LINKTYPE_UNKNOWN.getNumber()) {
+                output.writeEnum(3, linkType_);
+            }
             for (int i = 0; i < linkEndpointIds_.size(); i++) {
-                output.writeMessage(3, linkEndpointIds_.get(i));
+                output.writeMessage(4, linkEndpointIds_.get(i));
             }
             if (attributes_ != null) {
-                output.writeMessage(4, getAttributes());
+                output.writeMessage(5, getAttributes());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -24437,16 +24417,19 @@ public final class ContextOuterClass {
             if (linkId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getLinkId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
+            if (linkType_ != context.ContextOuterClass.LinkTypeEnum.LINKTYPE_UNKNOWN.getNumber()) {
+                size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, linkType_);
+            }
             for (int i = 0; i < linkEndpointIds_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, linkEndpointIds_.get(i));
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkEndpointIds_.get(i));
             }
             if (attributes_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getAttributes());
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getAttributes());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -24468,6 +24451,8 @@ public final class ContextOuterClass {
             }
             if (!getName().equals(other.getName()))
                 return false;
+            if (linkType_ != other.linkType_)
+                return false;
             if (!getLinkEndpointIdsList().equals(other.getLinkEndpointIdsList()))
                 return false;
             if (hasAttributes() != other.hasAttributes())
@@ -24476,7 +24461,7 @@ public final class ContextOuterClass {
                 if (!getAttributes().equals(other.getAttributes()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -24494,6 +24479,8 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + NAME_FIELD_NUMBER;
             hash = (53 * hash) + getName().hashCode();
+            hash = (37 * hash) + LINK_TYPE_FIELD_NUMBER;
+            hash = (53 * hash) + linkType_;
             if (getLinkEndpointIdsCount() > 0) {
                 hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
@@ -24502,7 +24489,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER;
                 hash = (53 * hash) + getAttributes().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -24596,40 +24583,33 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
                 name_ = "";
+                linkType_ = 0;
                 if (linkEndpointIdsBuilder_ == null) {
                     linkEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    linkEndpointIds_ = null;
                     linkEndpointIdsBuilder_.clear();
                 }
-                if (attributesBuilder_ == null) {
-                    attributes_ = null;
-                } else {
-                    attributes_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                attributes_ = null;
+                if (attributesBuilder_ != null) {
+                    attributesBuilder_.dispose();
                     attributesBuilder_ = null;
                 }
                 return this;
@@ -24657,59 +24637,40 @@ public final class ContextOuterClass {
             @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();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Link result) {
                 if (linkEndpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.linkEndpointIds_ = linkEndpointIds_;
                 } else {
                     result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
                 }
-                if (attributesBuilder_ == null) {
-                    result.attributes_ = attributes_;
-                } else {
-                    result.attributes_ = attributesBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.Link result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.linkId_ = linkIdBuilder_ == null ? linkId_ : linkIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.linkType_ = linkType_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.attributes_ = attributesBuilder_ == null ? attributes_ : attributesBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -24730,13 +24691,17 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
+                if (other.linkType_ != 0) {
+                    setLinkTypeValue(other.getLinkTypeValue());
+                }
                 if (linkEndpointIdsBuilder_ == null) {
                     if (!other.linkEndpointIds_.isEmpty()) {
                         if (linkEndpointIds_.isEmpty()) {
                             linkEndpointIds_ = other.linkEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureLinkEndpointIdsIsMutable();
                             linkEndpointIds_.addAll(other.linkEndpointIds_);
@@ -24749,7 +24714,7 @@ public final class ContextOuterClass {
                             linkEndpointIdsBuilder_.dispose();
                             linkEndpointIdsBuilder_ = null;
                             linkEndpointIds_ = other.linkEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             linkEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkEndpointIdsFieldBuilder() : null;
                         } else {
                             linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
@@ -24759,7 +24724,7 @@ public final class ContextOuterClass {
                 if (other.hasAttributes()) {
                     mergeAttributes(other.getAttributes());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -24771,17 +24736,75 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getLinkIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    linkType_ = input.readEnum();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 34:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (linkEndpointIdsBuilder_ == null) {
+                                        ensureLinkEndpointIdsIsMutable();
+                                        linkEndpointIds_.add(m);
+                                    } else {
+                                        linkEndpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getAttributesFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -24796,7 +24819,7 @@ public final class ContextOuterClass {
              * @return Whether the linkId field is set.
              */
             public boolean hasLinkId() {
-                return linkIdBuilder_ != null || linkId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -24820,10 +24843,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     linkId_ = value;
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -24833,10 +24857,11 @@ public final class ContextOuterClass {
             public Builder setLinkId(context.ContextOuterClass.LinkId.Builder builderForValue) {
                 if (linkIdBuilder_ == null) {
                     linkId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -24845,15 +24870,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
                 if (linkIdBuilder_ == null) {
-                    if (linkId_ != null) {
-                        linkId_ = context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && linkId_ != null && linkId_ != context.ContextOuterClass.LinkId.getDefaultInstance()) {
+                        getLinkIdBuilder().mergeFrom(value);
                     } else {
                         linkId_ = value;
                     }
-                    onChanged();
                 } else {
                     linkIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -24861,13 +24887,13 @@ public final class ContextOuterClass {
              * <code>.context.LinkId link_id = 1;</code>
              */
             public Builder clearLinkId() {
-                if (linkIdBuilder_ == null) {
-                    linkId_ = null;
-                    onChanged();
-                } else {
-                    linkId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -24875,6 +24901,7 @@ public final class ContextOuterClass {
              * <code>.context.LinkId link_id = 1;</code>
              */
             public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getLinkIdFieldBuilder().getBuilder();
             }
@@ -24944,6 +24971,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -24954,6 +24982,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -24969,6 +24998,66 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            private int linkType_ = 0;
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return The enum numeric value on the wire for linkType.
+             */
+            @java.lang.Override
+            public int getLinkTypeValue() {
+                return linkType_;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @param value The enum numeric value on the wire for linkType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLinkTypeValue(int value) {
+                linkType_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return The linkType.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.LinkTypeEnum getLinkType() {
+                context.ContextOuterClass.LinkTypeEnum result = context.ContextOuterClass.LinkTypeEnum.forNumber(linkType_);
+                return result == null ? context.ContextOuterClass.LinkTypeEnum.UNRECOGNIZED : result;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @param value The linkType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLinkType(context.ContextOuterClass.LinkTypeEnum value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                bitField0_ |= 0x00000004;
+                linkType_ = value.getNumber();
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.LinkTypeEnum link_type = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearLinkType() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                linkType_ = 0;
                 onChanged();
                 return this;
             }
@@ -24976,16 +25065,16 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ = java.util.Collections.emptyList();
 
             private void ensureLinkEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -24996,7 +25085,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public int getLinkEndpointIdsCount() {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25007,7 +25096,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25018,7 +25107,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25035,7 +25124,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25049,7 +25138,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25066,7 +25155,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25083,7 +25172,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25097,7 +25186,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25111,7 +25200,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder addAllLinkEndpointIds(java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25125,12 +25214,12 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder clearLinkEndpointIds() {
                 if (linkEndpointIdsBuilder_ == null) {
                     linkEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     linkEndpointIdsBuilder_.clear();
@@ -25139,7 +25228,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public Builder removeLinkEndpointIds(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25153,14 +25242,14 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(int index) {
                 return getLinkEndpointIdsFieldBuilder().getBuilder(index);
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
                 if (linkEndpointIdsBuilder_ == null) {
@@ -25171,7 +25260,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
                 if (linkEndpointIdsBuilder_ != null) {
@@ -25182,21 +25271,21 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
                 return getLinkEndpointIdsFieldBuilder().addBuilder(context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(int index) {
                 return getLinkEndpointIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
             public java.util.List<context.ContextOuterClass.EndPointId.Builder> getLinkEndpointIdsBuilderList() {
                 return getLinkEndpointIdsFieldBuilder().getBuilderList();
@@ -25204,7 +25293,7 @@ public final class ContextOuterClass {
 
             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());
+                    linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(linkEndpointIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     linkEndpointIds_ = null;
                 }
                 return linkEndpointIdsBuilder_;
@@ -25215,15 +25304,15 @@ public final class ContextOuterClass {
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.LinkAttributes, context.ContextOuterClass.LinkAttributes.Builder, context.ContextOuterClass.LinkAttributesOrBuilder> attributesBuilder_;
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              * @return Whether the attributes field is set.
              */
             public boolean hasAttributes() {
-                return attributesBuilder_ != null || attributes_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              * @return The attributes.
              */
             public context.ContextOuterClass.LinkAttributes getAttributes() {
@@ -25235,7 +25324,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder setAttributes(context.ContextOuterClass.LinkAttributes value) {
                 if (attributesBuilder_ == null) {
@@ -25243,67 +25332,71 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     attributes_ = value;
-                    onChanged();
                 } else {
                     attributesBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder setAttributes(context.ContextOuterClass.LinkAttributes.Builder builderForValue) {
                 if (attributesBuilder_ == null) {
                     attributes_ = builderForValue.build();
-                    onChanged();
                 } else {
                     attributesBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder mergeAttributes(context.ContextOuterClass.LinkAttributes value) {
                 if (attributesBuilder_ == null) {
-                    if (attributes_ != null) {
-                        attributes_ = context.ContextOuterClass.LinkAttributes.newBuilder(attributes_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && attributes_ != null && attributes_ != context.ContextOuterClass.LinkAttributes.getDefaultInstance()) {
+                        getAttributesBuilder().mergeFrom(value);
                     } else {
                         attributes_ = value;
                     }
-                    onChanged();
                 } else {
                     attributesBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public Builder clearAttributes() {
-                if (attributesBuilder_ == null) {
-                    attributes_ = null;
-                    onChanged();
-                } else {
-                    attributes_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                attributes_ = null;
+                if (attributesBuilder_ != null) {
+                    attributesBuilder_.dispose();
                     attributesBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public context.ContextOuterClass.LinkAttributes.Builder getAttributesBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getAttributesFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             public context.ContextOuterClass.LinkAttributesOrBuilder getAttributesOrBuilder() {
                 if (attributesBuilder_ != null) {
@@ -25314,7 +25407,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>.context.LinkAttributes attributes = 4;</code>
+             * <code>.context.LinkAttributes attributes = 5;</code>
              */
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.LinkAttributes, context.ContextOuterClass.LinkAttributes.Builder, context.ContextOuterClass.LinkAttributesOrBuilder> getAttributesFieldBuilder() {
                 if (attributesBuilder_ == null) {
@@ -25351,7 +25444,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -25422,57 +25525,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -25484,6 +25536,7 @@ public final class ContextOuterClass {
 
         public static final int LINK_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
 
         /**
@@ -25544,7 +25597,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 output.writeMessage(1, linkIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -25556,7 +25609,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, linkIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -25572,7 +25625,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
             if (!getLinkIdsList().equals(other.getLinkIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -25588,7 +25641,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -25682,29 +25735,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (linkIdsBuilder_ == null) {
                     linkIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    linkIds_ = null;
                     linkIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -25730,7 +25777,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.LinkIdList buildPartial() {
                 context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.LinkIdList result) {
                 if (linkIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
@@ -25740,38 +25795,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.LinkIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -25811,7 +25838,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -25823,17 +25850,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.LinkId m = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+                                    if (linkIdsBuilder_ == null) {
+                                        ensureLinkIdsIsMutable();
+                                        linkIds_.add(m);
+                                    } else {
+                                        linkIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -26103,7 +26160,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -26174,57 +26241,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -26236,6 +26252,7 @@ public final class ContextOuterClass {
 
         public static final int LINKS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Link> links_;
 
         /**
@@ -26296,7 +26313,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 output.writeMessage(1, links_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -26308,7 +26325,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < links_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, links_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -26324,7 +26341,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
             if (!getLinksList().equals(other.getLinksList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -26340,7 +26357,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINKS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinksList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -26434,29 +26451,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (linksBuilder_ == null) {
                     links_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    links_ = null;
                     linksBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -26482,7 +26493,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.LinkList buildPartial() {
                 context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.LinkList result) {
                 if (linksBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         links_ = java.util.Collections.unmodifiableList(links_);
@@ -26492,38 +26511,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.LinkList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -26563,7 +26554,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -26575,17 +26566,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Link m = input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry);
+                                    if (linksBuilder_ == null) {
+                                        ensureLinksIsMutable();
+                                        links_.add(m);
+                                    } else {
+                                        linksBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -26855,7 +26876,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -26934,70 +26965,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -27034,7 +27001,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int LINK_ID_FIELD_NUMBER = 2;
@@ -27064,7 +27031,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-            return getLinkId();
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -27088,7 +27055,7 @@ public final class ContextOuterClass {
             if (linkId_ != null) {
                 output.writeMessage(2, getLinkId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -27103,7 +27070,7 @@ public final class ContextOuterClass {
             if (linkId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getLinkId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -27129,7 +27096,7 @@ public final class ContextOuterClass {
                 if (!getLinkId().equals(other.getLinkId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -27149,7 +27116,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -27243,32 +27210,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (linkIdBuilder_ == null) {
-                    linkId_ = null;
-                } else {
-                    linkId_ = null;
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
                 return this;
@@ -27296,48 +27255,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.LinkEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.linkId_ = linkIdBuilder_ == null ? linkId_ : linkIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -27359,7 +27291,7 @@ public final class ContextOuterClass {
                 if (other.hasLinkId()) {
                     mergeLinkId(other.getLinkId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -27371,20 +27303,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getLinkIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -27394,7 +27360,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -27418,10 +27384,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -27431,10 +27398,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -27443,15 +27411,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -27459,13 +27428,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -27473,6 +27442,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -27508,7 +27478,7 @@ public final class ContextOuterClass {
              * @return Whether the linkId field is set.
              */
             public boolean hasLinkId() {
-                return linkIdBuilder_ != null || linkId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -27532,10 +27502,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     linkId_ = value;
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -27545,10 +27516,11 @@ public final class ContextOuterClass {
             public Builder setLinkId(context.ContextOuterClass.LinkId.Builder builderForValue) {
                 if (linkIdBuilder_ == null) {
                     linkId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -27557,15 +27529,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
                 if (linkIdBuilder_ == null) {
-                    if (linkId_ != null) {
-                        linkId_ = context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && linkId_ != null && linkId_ != context.ContextOuterClass.LinkId.getDefaultInstance()) {
+                        getLinkIdBuilder().mergeFrom(value);
                     } else {
                         linkId_ = value;
                     }
-                    onChanged();
                 } else {
                     linkIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -27573,13 +27546,13 @@ public final class ContextOuterClass {
              * <code>.context.LinkId link_id = 2;</code>
              */
             public Builder clearLinkId() {
-                if (linkIdBuilder_ == null) {
-                    linkId_ = null;
-                    onChanged();
-                } else {
-                    linkId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -27587,6 +27560,7 @@ public final class ContextOuterClass {
              * <code>.context.LinkId link_id = 2;</code>
              */
             public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getLinkIdFieldBuilder().getBuilder();
             }
@@ -27640,7 +27614,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -27723,70 +27707,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -27823,7 +27743,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
         public static final int SERVICE_UUID_FIELD_NUMBER = 2;
@@ -27853,7 +27773,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-            return getServiceUuid();
+            return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -27877,7 +27797,7 @@ public final class ContextOuterClass {
             if (serviceUuid_ != null) {
                 output.writeMessage(2, getServiceUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -27892,7 +27812,7 @@ public final class ContextOuterClass {
             if (serviceUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getServiceUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -27918,7 +27838,7 @@ public final class ContextOuterClass {
                 if (!getServiceUuid().equals(other.getServiceUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -27938,7 +27858,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getServiceUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -28036,32 +27956,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
-                if (serviceUuidBuilder_ == null) {
-                    serviceUuid_ = null;
-                } else {
-                    serviceUuid_ = null;
+                serviceUuid_ = null;
+                if (serviceUuidBuilder_ != null) {
+                    serviceUuidBuilder_.dispose();
                     serviceUuidBuilder_ = null;
                 }
                 return this;
@@ -28089,48 +28001,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.serviceUuid_ = serviceUuidBuilder_ == null ? serviceUuid_ : serviceUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -28152,7 +28037,7 @@ public final class ContextOuterClass {
                 if (other.hasServiceUuid()) {
                     mergeServiceUuid(other.getServiceUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -28164,20 +28049,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getServiceUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 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_;
@@ -28187,7 +28106,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -28211,10 +28130,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -28224,10 +28144,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -28236,15 +28157,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -28252,13 +28174,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -28266,6 +28188,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -28301,7 +28224,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceUuid field is set.
              */
             public boolean hasServiceUuid() {
-                return serviceUuidBuilder_ != null || serviceUuid_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -28325,10 +28248,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceUuid_ = value;
-                    onChanged();
                 } else {
                     serviceUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -28338,10 +28262,11 @@ public final class ContextOuterClass {
             public Builder setServiceUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (serviceUuidBuilder_ == null) {
                     serviceUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -28350,15 +28275,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
                 if (serviceUuidBuilder_ == null) {
-                    if (serviceUuid_ != null) {
-                        serviceUuid_ = context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && serviceUuid_ != null && serviceUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getServiceUuidBuilder().mergeFrom(value);
                     } else {
                         serviceUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -28366,13 +28292,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid service_uuid = 2;</code>
              */
             public Builder clearServiceUuid() {
-                if (serviceUuidBuilder_ == null) {
-                    serviceUuid_ = null;
-                    onChanged();
-                } else {
-                    serviceUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                serviceUuid_ = null;
+                if (serviceUuidBuilder_ != null) {
+                    serviceUuidBuilder_.dispose();
                     serviceUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -28380,6 +28306,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid service_uuid = 2;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getServiceUuidFieldBuilder().getBuilder();
             }
@@ -28433,7 +28360,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -28624,133 +28561,6 @@ public final class ContextOuterClass {
             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 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 24:
-                            {
-                                int rawValue = input.readEnum();
-                                serviceType_ = rawValue;
-                                break;
-                            }
-                        case 34:
-                            {
-                                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 42:
-                            {
-                                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 50:
-                            {
-                                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 58:
-                            {
-                                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;
-                            }
-                        case 66:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = 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;
         }
@@ -28787,12 +28597,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-            return getServiceId();
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -28829,7 +28640,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICE_TYPE_FIELD_NUMBER = 3;
 
-        private int serviceType_;
+        private int serviceType_ = 0;
 
         /**
          * <code>.context.ServiceTypeEnum service_type = 3;</code>
@@ -28846,13 +28657,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+            context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.forNumber(serviceType_);
             return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
         }
 
         public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
 
         /**
@@ -28897,6 +28708,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 5;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
 
         /**
@@ -28966,7 +28778,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-            return getServiceStatus();
+            return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
         }
 
         public static final int SERVICE_CONFIG_FIELD_NUMBER = 7;
@@ -28996,7 +28808,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-            return getServiceConfig();
+            return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
         }
 
         public static final int TIMESTAMP_FIELD_NUMBER = 8;
@@ -29026,7 +28838,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -29047,7 +28859,7 @@ public final class ContextOuterClass {
             if (serviceId_ != null) {
                 output.writeMessage(1, getServiceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
             if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
@@ -29068,7 +28880,7 @@ public final class ContextOuterClass {
             if (timestamp_ != null) {
                 output.writeMessage(8, getTimestamp());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -29080,7 +28892,7 @@ public final class ContextOuterClass {
             if (serviceId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getServiceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
             if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
@@ -29101,7 +28913,7 @@ public final class ContextOuterClass {
             if (timestamp_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, getTimestamp());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -29147,7 +28959,7 @@ public final class ContextOuterClass {
                 if (!getTimestamp().equals(other.getTimestamp()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -29187,7 +28999,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
                 hash = (53 * hash) + getTimestamp().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -29281,60 +29093,50 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
                 name_ = "";
                 serviceType_ = 0;
                 if (serviceEndpointIdsBuilder_ == null) {
                     serviceEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    serviceEndpointIds_ = null;
                     serviceEndpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
                 if (serviceConstraintsBuilder_ == null) {
                     serviceConstraints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    serviceConstraints_ = null;
                     serviceConstraintsBuilder_.clear();
                 }
-                if (serviceStatusBuilder_ == null) {
-                    serviceStatus_ = null;
-                } else {
-                    serviceStatus_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                serviceStatus_ = null;
+                if (serviceStatusBuilder_ != null) {
+                    serviceStatusBuilder_.dispose();
                     serviceStatusBuilder_ = null;
                 }
-                if (serviceConfigBuilder_ == null) {
-                    serviceConfig_ = null;
-                } else {
-                    serviceConfig_ = null;
+                serviceConfig_ = null;
+                if (serviceConfigBuilder_ != null) {
+                    serviceConfigBuilder_.dispose();
                     serviceConfigBuilder_ = null;
                 }
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
                 return this;
@@ -29362,79 +29164,55 @@ public final class ContextOuterClass {
             @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();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
-                result.serviceType_ = serviceType_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Service result) {
                 if (serviceEndpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.serviceEndpointIds_ = serviceEndpointIds_;
                 } else {
                     result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
                 }
                 if (serviceConstraintsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
                         serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000010);
                     }
                     result.serviceConstraints_ = serviceConstraints_;
                 } else {
                     result.serviceConstraints_ = serviceConstraintsBuilder_.build();
                 }
-                if (serviceStatusBuilder_ == null) {
-                    result.serviceStatus_ = serviceStatus_;
-                } else {
-                    result.serviceStatus_ = serviceStatusBuilder_.build();
+            }
+
+            private void buildPartial0(context.ContextOuterClass.Service result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
                 }
-                if (serviceConfigBuilder_ == null) {
-                    result.serviceConfig_ = serviceConfig_;
-                } else {
-                    result.serviceConfig_ = serviceConfigBuilder_.build();
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
                 }
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.serviceType_ = serviceType_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.serviceStatus_ = serviceStatusBuilder_ == null ? serviceStatus_ : serviceStatusBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.serviceConfig_ = serviceConfigBuilder_ == null ? serviceConfig_ : serviceConfigBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.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
@@ -29455,6 +29233,7 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (other.serviceType_ != 0) {
@@ -29464,7 +29243,7 @@ public final class ContextOuterClass {
                     if (!other.serviceEndpointIds_.isEmpty()) {
                         if (serviceEndpointIds_.isEmpty()) {
                             serviceEndpointIds_ = other.serviceEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureServiceEndpointIdsIsMutable();
                             serviceEndpointIds_.addAll(other.serviceEndpointIds_);
@@ -29477,7 +29256,7 @@ public final class ContextOuterClass {
                             serviceEndpointIdsBuilder_.dispose();
                             serviceEndpointIdsBuilder_ = null;
                             serviceEndpointIds_ = other.serviceEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             serviceEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getServiceEndpointIdsFieldBuilder() : null;
                         } else {
                             serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
@@ -29488,7 +29267,7 @@ public final class ContextOuterClass {
                     if (!other.serviceConstraints_.isEmpty()) {
                         if (serviceConstraints_.isEmpty()) {
                             serviceConstraints_ = other.serviceConstraints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                         } else {
                             ensureServiceConstraintsIsMutable();
                             serviceConstraints_.addAll(other.serviceConstraints_);
@@ -29501,7 +29280,7 @@ public final class ContextOuterClass {
                             serviceConstraintsBuilder_.dispose();
                             serviceConstraintsBuilder_ = null;
                             serviceConstraints_ = other.serviceConstraints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                             serviceConstraintsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getServiceConstraintsFieldBuilder() : null;
                         } else {
                             serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
@@ -29517,7 +29296,7 @@ public final class ContextOuterClass {
                 if (other.hasTimestamp()) {
                     mergeTimestamp(other.getTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -29529,17 +29308,101 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    serviceType_ = input.readEnum();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 34:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (serviceEndpointIdsBuilder_ == null) {
+                                        ensureServiceEndpointIdsIsMutable();
+                                        serviceEndpointIds_.add(m);
+                                    } else {
+                                        serviceEndpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.Constraint m = input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry);
+                                    if (serviceConstraintsBuilder_ == null) {
+                                        ensureServiceConstraintsIsMutable();
+                                        serviceConstraints_.add(m);
+                                    } else {
+                                        serviceConstraintsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getServiceStatusFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    input.readMessage(getServiceConfigFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 66
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -29554,7 +29417,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceId field is set.
              */
             public boolean hasServiceId() {
-                return serviceIdBuilder_ != null || serviceId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -29578,10 +29441,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceId_ = value;
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -29591,10 +29455,11 @@ public final class ContextOuterClass {
             public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
                 if (serviceIdBuilder_ == null) {
                     serviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -29603,15 +29468,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
                 if (serviceIdBuilder_ == null) {
-                    if (serviceId_ != null) {
-                        serviceId_ = context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
                         serviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -29619,13 +29485,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 1;</code>
              */
             public Builder clearServiceId() {
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                    onChanged();
-                } else {
-                    serviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -29633,6 +29499,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 1;</code>
              */
             public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getServiceIdFieldBuilder().getBuilder();
             }
@@ -29702,6 +29569,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -29712,6 +29580,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -29727,6 +29596,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -29749,6 +29619,7 @@ public final class ContextOuterClass {
              */
             public Builder setServiceTypeValue(int value) {
                 serviceType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -29759,8 +29630,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+                context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.forNumber(serviceType_);
                 return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
             }
 
@@ -29773,6 +29643,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000004;
                 serviceType_ = value.getNumber();
                 onChanged();
                 return this;
@@ -29783,6 +29654,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearServiceType() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 serviceType_ = 0;
                 onChanged();
                 return this;
@@ -29791,9 +29663,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ = java.util.Collections.emptyList();
 
             private void ensureServiceEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -29945,7 +29817,7 @@ public final class ContextOuterClass {
             public Builder clearServiceEndpointIds() {
                 if (serviceEndpointIdsBuilder_ == null) {
                     serviceEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     serviceEndpointIdsBuilder_.clear();
@@ -30019,7 +29891,7 @@ public final class ContextOuterClass {
 
             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());
+                    serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(serviceEndpointIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     serviceEndpointIds_ = null;
                 }
                 return serviceEndpointIdsBuilder_;
@@ -30028,9 +29900,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ = java.util.Collections.emptyList();
 
             private void ensureServiceConstraintsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000010) != 0)) {
                     serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000010;
                 }
             }
 
@@ -30182,7 +30054,7 @@ public final class ContextOuterClass {
             public Builder clearServiceConstraints() {
                 if (serviceConstraintsBuilder_ == null) {
                     serviceConstraints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000010);
                     onChanged();
                 } else {
                     serviceConstraintsBuilder_.clear();
@@ -30256,7 +30128,7 @@ public final class ContextOuterClass {
 
             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());
+                    serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(serviceConstraints_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
                     serviceConstraints_ = null;
                 }
                 return serviceConstraintsBuilder_;
@@ -30271,7 +30143,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceStatus field is set.
              */
             public boolean hasServiceStatus() {
-                return serviceStatusBuilder_ != null || serviceStatus_ != null;
+                return ((bitField0_ & 0x00000020) != 0);
             }
 
             /**
@@ -30295,10 +30167,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceStatus_ = value;
-                    onChanged();
                 } else {
                     serviceStatusBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -30308,10 +30181,11 @@ public final class ContextOuterClass {
             public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
                 if (serviceStatusBuilder_ == null) {
                     serviceStatus_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceStatusBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -30320,15 +30194,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
                 if (serviceStatusBuilder_ == null) {
-                    if (serviceStatus_ != null) {
-                        serviceStatus_ = context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000020) != 0) && serviceStatus_ != null && serviceStatus_ != context.ContextOuterClass.ServiceStatus.getDefaultInstance()) {
+                        getServiceStatusBuilder().mergeFrom(value);
                     } else {
                         serviceStatus_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceStatusBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -30336,13 +30211,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceStatus service_status = 6;</code>
              */
             public Builder clearServiceStatus() {
-                if (serviceStatusBuilder_ == null) {
-                    serviceStatus_ = null;
-                    onChanged();
-                } else {
-                    serviceStatus_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                serviceStatus_ = null;
+                if (serviceStatusBuilder_ != null) {
+                    serviceStatusBuilder_.dispose();
                     serviceStatusBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -30350,6 +30225,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceStatus service_status = 6;</code>
              */
             public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return getServiceStatusFieldBuilder().getBuilder();
             }
@@ -30385,7 +30261,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceConfig field is set.
              */
             public boolean hasServiceConfig() {
-                return serviceConfigBuilder_ != null || serviceConfig_ != null;
+                return ((bitField0_ & 0x00000040) != 0);
             }
 
             /**
@@ -30409,10 +30285,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceConfig_ = value;
-                    onChanged();
                 } else {
                     serviceConfigBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -30422,10 +30299,11 @@ public final class ContextOuterClass {
             public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
                 if (serviceConfigBuilder_ == null) {
                     serviceConfig_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceConfigBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -30434,15 +30312,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
                 if (serviceConfigBuilder_ == null) {
-                    if (serviceConfig_ != null) {
-                        serviceConfig_ = context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000040) != 0) && serviceConfig_ != null && serviceConfig_ != context.ContextOuterClass.ServiceConfig.getDefaultInstance()) {
+                        getServiceConfigBuilder().mergeFrom(value);
                     } else {
                         serviceConfig_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceConfigBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -30450,13 +30329,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceConfig service_config = 7;</code>
              */
             public Builder clearServiceConfig() {
-                if (serviceConfigBuilder_ == null) {
-                    serviceConfig_ = null;
-                    onChanged();
-                } else {
-                    serviceConfig_ = null;
+                bitField0_ = (bitField0_ & ~0x00000040);
+                serviceConfig_ = null;
+                if (serviceConfigBuilder_ != null) {
+                    serviceConfigBuilder_.dispose();
                     serviceConfigBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -30464,6 +30343,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceConfig service_config = 7;</code>
              */
             public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+                bitField0_ |= 0x00000040;
                 onChanged();
                 return getServiceConfigFieldBuilder().getBuilder();
             }
@@ -30499,7 +30379,7 @@ public final class ContextOuterClass {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000080) != 0);
             }
 
             /**
@@ -30523,10 +30403,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -30536,10 +30417,11 @@ public final class ContextOuterClass {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -30548,15 +30430,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000080) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -30564,13 +30447,13 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 8;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000080);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -30578,6 +30461,7 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 8;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000080;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -30631,7 +30515,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -30689,50 +30583,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -30744,7 +30594,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
 
-        private int serviceStatus_;
+        private int serviceStatus_ = 0;
 
         /**
          * <code>.context.ServiceStatusEnum service_status = 1;</code>
@@ -30761,8 +30611,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+            context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.forNumber(serviceStatus_);
             return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
         }
 
@@ -30784,7 +30633,7 @@ public final class ContextOuterClass {
             if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
                 output.writeEnum(1, serviceStatus_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -30796,7 +30645,7 @@ public final class ContextOuterClass {
             if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, serviceStatus_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -30812,7 +30661,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
             if (serviceStatus_ != other.serviceStatus_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -30826,7 +30675,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
             hash = (53 * hash) + serviceStatus_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -30920,22 +30769,16 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 serviceStatus_ = 0;
                 return this;
             }
@@ -30962,39 +30805,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ServiceStatus buildPartial() {
                 context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
-                result.serviceStatus_ = serviceStatus_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceStatus result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.serviceStatus_ = serviceStatus_;
+                }
             }
 
             @java.lang.Override
@@ -31013,7 +30835,7 @@ public final class ContextOuterClass {
                 if (other.serviceStatus_ != 0) {
                     setServiceStatusValue(other.getServiceStatusValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -31025,20 +30847,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    serviceStatus_ = input.readEnum();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int serviceStatus_ = 0;
 
             /**
@@ -31057,6 +30906,7 @@ public final class ContextOuterClass {
              */
             public Builder setServiceStatusValue(int value) {
                 serviceStatus_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -31067,8 +30917,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+                context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.forNumber(serviceStatus_);
                 return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
             }
 
@@ -31081,6 +30930,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000001;
                 serviceStatus_ = value.getNumber();
                 onChanged();
                 return this;
@@ -31091,6 +30941,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearServiceStatus() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 serviceStatus_ = 0;
                 onChanged();
                 return this;
@@ -31123,7 +30974,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -31194,57 +31055,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -31256,6 +31066,7 @@ public final class ContextOuterClass {
 
         public static final int CONFIG_RULES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
 
         /**
@@ -31316,7 +31127,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 output.writeMessage(1, configRules_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -31328,7 +31139,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, configRules_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -31344,7 +31155,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
             if (!getConfigRulesList().equals(other.getConfigRulesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -31360,7 +31171,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
                 hash = (53 * hash) + getConfigRulesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -31454,29 +31265,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (configRulesBuilder_ == null) {
                     configRules_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    configRules_ = null;
                     configRulesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -31502,7 +31307,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ServiceConfig buildPartial() {
                 context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ServiceConfig result) {
                 if (configRulesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         configRules_ = java.util.Collections.unmodifiableList(configRules_);
@@ -31512,38 +31325,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceConfig result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -31583,7 +31368,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -31595,17 +31380,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ConfigRule m = input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry);
+                                    if (configRulesBuilder_ == null) {
+                                        ensureConfigRulesIsMutable();
+                                        configRules_.add(m);
+                                    } else {
+                                        configRulesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -31875,7 +31690,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -31946,57 +31771,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -32008,6 +31782,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICE_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
 
         /**
@@ -32068,7 +31843,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < serviceIds_.size(); i++) {
                 output.writeMessage(1, serviceIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -32080,7 +31855,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < serviceIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, serviceIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -32096,7 +31871,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
             if (!getServiceIdsList().equals(other.getServiceIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -32112,7 +31887,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getServiceIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -32206,29 +31981,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (serviceIdsBuilder_ == null) {
                     serviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    serviceIds_ = null;
                     serviceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -32254,7 +32023,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ServiceIdList buildPartial() {
                 context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ServiceIdList result) {
                 if (serviceIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
@@ -32264,38 +32041,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -32335,7 +32084,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -32347,17 +32096,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ServiceId m = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+                                    if (serviceIdsBuilder_ == null) {
+                                        ensureServiceIdsIsMutable();
+                                        serviceIds_.add(m);
+                                    } else {
+                                        serviceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -32627,7 +32406,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -32698,57 +32487,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -32760,6 +32498,7 @@ public final class ContextOuterClass {
 
         public static final int SERVICES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Service> services_;
 
         /**
@@ -32820,7 +32559,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < services_.size(); i++) {
                 output.writeMessage(1, services_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -32832,7 +32571,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < services_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, services_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -32848,7 +32587,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
             if (!getServicesList().equals(other.getServicesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -32864,7 +32603,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SERVICES_FIELD_NUMBER;
                 hash = (53 * hash) + getServicesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -32958,29 +32697,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (servicesBuilder_ == null) {
                     services_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    services_ = null;
                     servicesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -33006,7 +32739,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ServiceList buildPartial() {
                 context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ServiceList result) {
                 if (servicesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         services_ = java.util.Collections.unmodifiableList(services_);
@@ -33016,38 +32757,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -33087,7 +32800,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -33099,17 +32812,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Service m = input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry);
+                                    if (servicesBuilder_ == null) {
+                                        ensureServicesIsMutable();
+                                        services_.add(m);
+                                    } else {
+                                        servicesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -33379,7 +33122,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -33459,72 +33212,6 @@ public final class ContextOuterClass {
             return new ServiceFilter();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ServiceFilter(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.ServiceIdList.Builder subBuilder = null;
-                                if (serviceIds_ != null) {
-                                    subBuilder = serviceIds_.toBuilder();
-                                }
-                                serviceIds_ = input.readMessage(context.ContextOuterClass.ServiceIdList.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(serviceIds_);
-                                    serviceIds_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 16:
-                            {
-                                includeEndpointIds_ = input.readBool();
-                                break;
-                            }
-                        case 24:
-                            {
-                                includeConstraints_ = input.readBool();
-                                break;
-                            }
-                        case 32:
-                            {
-                                includeConfigRules_ = 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_ServiceFilter_descriptor;
         }
@@ -33561,12 +33248,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceIdListOrBuilder getServiceIdsOrBuilder() {
-            return getServiceIds();
+            return serviceIds_ == null ? context.ContextOuterClass.ServiceIdList.getDefaultInstance() : serviceIds_;
         }
 
         public static final int INCLUDE_ENDPOINT_IDS_FIELD_NUMBER = 2;
 
-        private boolean includeEndpointIds_;
+        private boolean includeEndpointIds_ = false;
 
         /**
          * <code>bool include_endpoint_ids = 2;</code>
@@ -33579,7 +33266,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_CONSTRAINTS_FIELD_NUMBER = 3;
 
-        private boolean includeConstraints_;
+        private boolean includeConstraints_ = false;
 
         /**
          * <code>bool include_constraints = 3;</code>
@@ -33592,7 +33279,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 4;
 
-        private boolean includeConfigRules_;
+        private boolean includeConfigRules_ = false;
 
         /**
          * <code>bool include_config_rules = 4;</code>
@@ -33630,7 +33317,7 @@ public final class ContextOuterClass {
             if (includeConfigRules_ != false) {
                 output.writeBool(4, includeConfigRules_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -33651,7 +33338,7 @@ public final class ContextOuterClass {
             if (includeConfigRules_ != false) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, includeConfigRules_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -33677,7 +33364,7 @@ public final class ContextOuterClass {
                 return false;
             if (getIncludeConfigRules() != other.getIncludeConfigRules())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -33699,7 +33386,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeConstraints());
             hash = (37 * hash) + INCLUDE_CONFIG_RULES_FIELD_NUMBER;
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeConfigRules());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -33793,26 +33480,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ServiceFilter.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 (serviceIdsBuilder_ == null) {
-                    serviceIds_ = null;
-                } else {
-                    serviceIds_ = null;
+                bitField0_ = 0;
+                serviceIds_ = null;
+                if (serviceIdsBuilder_ != null) {
+                    serviceIdsBuilder_.dispose();
                     serviceIdsBuilder_ = null;
                 }
                 includeEndpointIds_ = false;
@@ -33843,46 +33523,27 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ServiceFilter buildPartial() {
                 context.ContextOuterClass.ServiceFilter result = new context.ContextOuterClass.ServiceFilter(this);
-                if (serviceIdsBuilder_ == null) {
-                    result.serviceIds_ = serviceIds_;
-                } else {
-                    result.serviceIds_ = serviceIdsBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.includeEndpointIds_ = includeEndpointIds_;
-                result.includeConstraints_ = includeConstraints_;
-                result.includeConfigRules_ = includeConfigRules_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceFilter result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.serviceIds_ = serviceIdsBuilder_ == null ? serviceIds_ : serviceIdsBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.includeEndpointIds_ = includeEndpointIds_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.includeConstraints_ = includeConstraints_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.includeConfigRules_ = includeConfigRules_;
+                }
             }
 
             @java.lang.Override
@@ -33910,7 +33571,7 @@ public final class ContextOuterClass {
                 if (other.getIncludeConfigRules() != false) {
                     setIncludeConfigRules(other.getIncludeConfigRules());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -33922,20 +33583,68 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ServiceFilter parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getServiceIdsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    includeEndpointIds_ = input.readBool();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 24:
+                                {
+                                    includeConstraints_ = input.readBool();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    includeConfigRules_ = input.readBool();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceFilter) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.ServiceIdList serviceIds_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ServiceIdList, context.ContextOuterClass.ServiceIdList.Builder, context.ContextOuterClass.ServiceIdListOrBuilder> serviceIdsBuilder_;
@@ -33945,7 +33654,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceIds field is set.
              */
             public boolean hasServiceIds() {
-                return serviceIdsBuilder_ != null || serviceIds_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -33969,10 +33678,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceIds_ = value;
-                    onChanged();
                 } else {
                     serviceIdsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -33982,10 +33692,11 @@ public final class ContextOuterClass {
             public Builder setServiceIds(context.ContextOuterClass.ServiceIdList.Builder builderForValue) {
                 if (serviceIdsBuilder_ == null) {
                     serviceIds_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceIdsBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -33994,15 +33705,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceIds(context.ContextOuterClass.ServiceIdList value) {
                 if (serviceIdsBuilder_ == null) {
-                    if (serviceIds_ != null) {
-                        serviceIds_ = context.ContextOuterClass.ServiceIdList.newBuilder(serviceIds_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && serviceIds_ != null && serviceIds_ != context.ContextOuterClass.ServiceIdList.getDefaultInstance()) {
+                        getServiceIdsBuilder().mergeFrom(value);
                     } else {
                         serviceIds_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceIdsBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -34010,13 +33722,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceIdList service_ids = 1;</code>
              */
             public Builder clearServiceIds() {
-                if (serviceIdsBuilder_ == null) {
-                    serviceIds_ = null;
-                    onChanged();
-                } else {
-                    serviceIds_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                serviceIds_ = null;
+                if (serviceIdsBuilder_ != null) {
+                    serviceIdsBuilder_.dispose();
                     serviceIdsBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -34024,6 +33736,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceIdList service_ids = 1;</code>
              */
             public context.ContextOuterClass.ServiceIdList.Builder getServiceIdsBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getServiceIdsFieldBuilder().getBuilder();
             }
@@ -34068,6 +33781,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeEndpointIds(boolean value) {
                 includeEndpointIds_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -34077,6 +33791,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeEndpointIds() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 includeEndpointIds_ = false;
                 onChanged();
                 return this;
@@ -34100,6 +33815,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeConstraints(boolean value) {
                 includeConstraints_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -34109,6 +33825,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeConstraints() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 includeConstraints_ = false;
                 onChanged();
                 return this;
@@ -34132,6 +33849,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeConfigRules(boolean value) {
                 includeConfigRules_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -34141,6 +33859,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeConfigRules() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 includeConfigRules_ = false;
                 onChanged();
                 return this;
@@ -34173,7 +33892,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ServiceFilter parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ServiceFilter(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -34252,70 +33981,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -34352,7 +34017,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int SERVICE_ID_FIELD_NUMBER = 2;
@@ -34382,7 +34047,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-            return getServiceId();
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -34406,7 +34071,7 @@ public final class ContextOuterClass {
             if (serviceId_ != null) {
                 output.writeMessage(2, getServiceId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -34421,7 +34086,7 @@ public final class ContextOuterClass {
             if (serviceId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getServiceId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -34447,7 +34112,7 @@ public final class ContextOuterClass {
                 if (!getServiceId().equals(other.getServiceId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -34467,7 +34132,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getServiceId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -34561,32 +34226,24 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                } else {
-                    serviceId_ = null;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
                 return this;
@@ -34614,48 +34271,21 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -34677,7 +34307,7 @@ public final class ContextOuterClass {
                 if (other.hasServiceId()) {
                     mergeServiceId(other.getServiceId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -34689,20 +34319,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -34712,7 +34376,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -34736,10 +34400,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -34749,10 +34414,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -34761,15 +34427,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -34777,13 +34444,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -34791,6 +34458,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -34826,7 +34494,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceId field is set.
              */
             public boolean hasServiceId() {
-                return serviceIdBuilder_ != null || serviceId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -34850,10 +34518,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceId_ = value;
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -34863,10 +34532,11 @@ public final class ContextOuterClass {
             public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
                 if (serviceIdBuilder_ == null) {
                     serviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -34875,15 +34545,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
                 if (serviceIdBuilder_ == null) {
-                    if (serviceId_ != null) {
-                        serviceId_ = context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
                         serviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -34891,13 +34562,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 2;</code>
              */
             public Builder clearServiceId() {
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                    onChanged();
-                } else {
-                    serviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -34905,6 +34576,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 2;</code>
              */
             public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getServiceIdFieldBuilder().getBuilder();
             }
@@ -34958,7 +34630,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -35041,70 +34723,6 @@ public final class ContextOuterClass {
             return new SliceId();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceId(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 (sliceUuid_ != null) {
-                                    subBuilder = sliceUuid_.toBuilder();
-                                }
-                                sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceUuid_);
-                                    sliceUuid_ = 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_SliceId_descriptor;
         }
@@ -35141,7 +34759,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
         public static final int SLICE_UUID_FIELD_NUMBER = 2;
@@ -35171,7 +34789,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-            return getSliceUuid();
+            return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -35195,7 +34813,7 @@ public final class ContextOuterClass {
             if (sliceUuid_ != null) {
                 output.writeMessage(2, getSliceUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -35210,7 +34828,7 @@ public final class ContextOuterClass {
             if (sliceUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSliceUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -35236,7 +34854,7 @@ public final class ContextOuterClass {
                 if (!getSliceUuid().equals(other.getSliceUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -35256,7 +34874,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getSliceUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -35354,32 +34972,24 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceId.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;
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
-                if (sliceUuidBuilder_ == null) {
-                    sliceUuid_ = null;
-                } else {
-                    sliceUuid_ = null;
+                sliceUuid_ = null;
+                if (sliceUuidBuilder_ != null) {
+                    sliceUuidBuilder_.dispose();
                     sliceUuidBuilder_ = null;
                 }
                 return this;
@@ -35407,48 +35017,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceId buildPartial() {
                 context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
-                if (contextIdBuilder_ == null) {
-                    result.contextId_ = contextId_;
-                } else {
-                    result.contextId_ = contextIdBuilder_.build();
-                }
-                if (sliceUuidBuilder_ == null) {
-                    result.sliceUuid_ = sliceUuid_;
-                } else {
-                    result.sliceUuid_ = sliceUuidBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.SliceId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.sliceUuid_ = sliceUuidBuilder_ == null ? sliceUuid_ : sliceUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -35470,7 +35053,7 @@ public final class ContextOuterClass {
                 if (other.hasSliceUuid()) {
                     mergeSliceUuid(other.getSliceUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -35482,20 +35065,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceId parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getSliceUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 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_;
@@ -35505,7 +35122,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -35529,10 +35146,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -35542,10 +35160,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -35554,15 +35173,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -35570,13 +35190,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -35584,6 +35204,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -35619,7 +35240,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceUuid field is set.
              */
             public boolean hasSliceUuid() {
-                return sliceUuidBuilder_ != null || sliceUuid_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -35643,10 +35264,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceUuid_ = value;
-                    onChanged();
                 } else {
                     sliceUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -35656,10 +35278,11 @@ public final class ContextOuterClass {
             public Builder setSliceUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (sliceUuidBuilder_ == null) {
                     sliceUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -35668,15 +35291,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
                 if (sliceUuidBuilder_ == null) {
-                    if (sliceUuid_ != null) {
-                        sliceUuid_ = context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && sliceUuid_ != null && sliceUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getSliceUuidBuilder().mergeFrom(value);
                     } else {
                         sliceUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -35684,13 +35308,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid slice_uuid = 2;</code>
              */
             public Builder clearSliceUuid() {
-                if (sliceUuidBuilder_ == null) {
-                    sliceUuid_ = null;
-                    onChanged();
-                } else {
-                    sliceUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                sliceUuid_ = null;
+                if (sliceUuidBuilder_ != null) {
+                    sliceUuidBuilder_.dispose();
                     sliceUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -35698,6 +35322,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid slice_uuid = 2;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getSliceUuidFieldBuilder().getBuilder();
             }
@@ -35751,7 +35376,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceId(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -35998,164 +35633,6 @@ public final class ContextOuterClass {
             return new Slice();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Slice(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.SliceId.Builder subBuilder = null;
-                                if (sliceId_ != null) {
-                                    subBuilder = sliceId_.toBuilder();
-                                }
-                                sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceId_);
-                                    sliceId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                sliceEndpointIds_.add(input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                                    sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                sliceConstraints_.add(input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 42:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                                    sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                sliceServiceIds_.add(input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 50:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000008) != 0)) {
-                                    sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                                    mutable_bitField0_ |= 0x00000008;
-                                }
-                                sliceSubsliceIds_.add(input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 58:
-                            {
-                                context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
-                                if (sliceStatus_ != null) {
-                                    subBuilder = sliceStatus_.toBuilder();
-                                }
-                                sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceStatus_);
-                                    sliceStatus_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 66:
-                            {
-                                context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
-                                if (sliceConfig_ != null) {
-                                    subBuilder = sliceConfig_.toBuilder();
-                                }
-                                sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceConfig_);
-                                    sliceConfig_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 74:
-                            {
-                                context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
-                                if (sliceOwner_ != null) {
-                                    subBuilder = sliceOwner_.toBuilder();
-                                }
-                                sliceOwner_ = input.readMessage(context.ContextOuterClass.SliceOwner.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceOwner_);
-                                    sliceOwner_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 82:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = 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)) {
-                    sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-                }
-                if (((mutable_bitField0_ & 0x00000002) != 0)) {
-                    sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-                }
-                if (((mutable_bitField0_ & 0x00000004) != 0)) {
-                    sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-                }
-                if (((mutable_bitField0_ & 0x00000008) != 0)) {
-                    sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_Slice_descriptor;
         }
@@ -36192,12 +35669,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-            return getSliceId();
+            return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -36234,6 +35712,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
 
         /**
@@ -36278,6 +35757,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
 
         /**
@@ -36322,6 +35802,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 5;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
 
         /**
@@ -36366,6 +35847,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 6;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
 
         /**
@@ -36435,7 +35917,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-            return getSliceStatus();
+            return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         }
 
         public static final int SLICE_CONFIG_FIELD_NUMBER = 8;
@@ -36465,7 +35947,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
-            return getSliceConfig();
+            return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
         }
 
         public static final int SLICE_OWNER_FIELD_NUMBER = 9;
@@ -36495,7 +35977,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
-            return getSliceOwner();
+            return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
         }
 
         public static final int TIMESTAMP_FIELD_NUMBER = 10;
@@ -36525,7 +36007,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -36546,7 +36028,7 @@ public final class ContextOuterClass {
             if (sliceId_ != null) {
                 output.writeMessage(1, getSliceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
             for (int i = 0; i < sliceEndpointIds_.size(); i++) {
@@ -36573,7 +36055,7 @@ public final class ContextOuterClass {
             if (timestamp_ != null) {
                 output.writeMessage(10, getTimestamp());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -36585,7 +36067,7 @@ public final class ContextOuterClass {
             if (sliceId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getSliceId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
             for (int i = 0; i < sliceEndpointIds_.size(); i++) {
@@ -36612,7 +36094,7 @@ public final class ContextOuterClass {
             if (timestamp_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getTimestamp());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -36666,7 +36148,7 @@ public final class ContextOuterClass {
                 if (!getTimestamp().equals(other.getTimestamp()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -36716,7 +36198,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
                 hash = (53 * hash) + getTimestamp().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -36810,79 +36292,68 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Slice.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getSliceEndpointIdsFieldBuilder();
-                    getSliceConstraintsFieldBuilder();
-                    getSliceServiceIdsFieldBuilder();
-                    getSliceSubsliceIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                } else {
-                    sliceId_ = null;
+                bitField0_ = 0;
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
                 name_ = "";
                 if (sliceEndpointIdsBuilder_ == null) {
                     sliceEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    sliceEndpointIds_ = null;
                     sliceEndpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (sliceConstraintsBuilder_ == null) {
                     sliceConstraints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    sliceConstraints_ = null;
                     sliceConstraintsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
                 if (sliceServiceIdsBuilder_ == null) {
                     sliceServiceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
                 } else {
+                    sliceServiceIds_ = null;
                     sliceServiceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000010);
                 if (sliceSubsliceIdsBuilder_ == null) {
                     sliceSubsliceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000008);
                 } else {
+                    sliceSubsliceIds_ = null;
                     sliceSubsliceIdsBuilder_.clear();
                 }
-                if (sliceStatusBuilder_ == null) {
-                    sliceStatus_ = null;
-                } else {
-                    sliceStatus_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                sliceStatus_ = null;
+                if (sliceStatusBuilder_ != null) {
+                    sliceStatusBuilder_.dispose();
                     sliceStatusBuilder_ = null;
                 }
-                if (sliceConfigBuilder_ == null) {
-                    sliceConfig_ = null;
-                } else {
-                    sliceConfig_ = null;
+                sliceConfig_ = null;
+                if (sliceConfigBuilder_ != null) {
+                    sliceConfigBuilder_.dispose();
                     sliceConfigBuilder_ = null;
                 }
-                if (sliceOwnerBuilder_ == null) {
-                    sliceOwner_ = null;
-                } else {
-                    sliceOwner_ = null;
+                sliceOwner_ = null;
+                if (sliceOwnerBuilder_ != null) {
+                    sliceOwnerBuilder_.dispose();
                     sliceOwnerBuilder_ = null;
                 }
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
                 return this;
@@ -36910,101 +36381,73 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Slice buildPartial() {
                 context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
-                int from_bitField0_ = bitField0_;
-                if (sliceIdBuilder_ == null) {
-                    result.sliceId_ = sliceId_;
-                } else {
-                    result.sliceId_ = sliceIdBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.name_ = name_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Slice result) {
                 if (sliceEndpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.sliceEndpointIds_ = sliceEndpointIds_;
                 } else {
                     result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
                 }
                 if (sliceConstraintsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.sliceConstraints_ = sliceConstraints_;
                 } else {
                     result.sliceConstraints_ = sliceConstraintsBuilder_.build();
                 }
                 if (sliceServiceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0)) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
                         sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000004);
+                        bitField0_ = (bitField0_ & ~0x00000010);
                     }
                     result.sliceServiceIds_ = sliceServiceIds_;
                 } else {
                     result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
                 }
                 if (sliceSubsliceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000008) != 0)) {
+                    if (((bitField0_ & 0x00000020) != 0)) {
                         sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000008);
+                        bitField0_ = (bitField0_ & ~0x00000020);
                     }
                     result.sliceSubsliceIds_ = sliceSubsliceIds_;
                 } else {
                     result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
                 }
-                if (sliceStatusBuilder_ == null) {
-                    result.sliceStatus_ = sliceStatus_;
-                } else {
-                    result.sliceStatus_ = sliceStatusBuilder_.build();
+            }
+
+            private void buildPartial0(context.ContextOuterClass.Slice result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.sliceId_ = sliceIdBuilder_ == null ? sliceId_ : sliceIdBuilder_.build();
                 }
-                if (sliceConfigBuilder_ == null) {
-                    result.sliceConfig_ = sliceConfig_;
-                } else {
-                    result.sliceConfig_ = sliceConfigBuilder_.build();
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
                 }
-                if (sliceOwnerBuilder_ == null) {
-                    result.sliceOwner_ = sliceOwner_;
-                } else {
-                    result.sliceOwner_ = sliceOwnerBuilder_.build();
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.sliceStatus_ = sliceStatusBuilder_ == null ? sliceStatus_ : sliceStatusBuilder_.build();
                 }
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.sliceConfig_ = sliceConfigBuilder_ == null ? sliceConfig_ : sliceConfigBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.sliceOwner_ = sliceOwnerBuilder_ == null ? sliceOwner_ : sliceOwnerBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000200) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.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
@@ -37025,13 +36468,14 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (sliceEndpointIdsBuilder_ == null) {
                     if (!other.sliceEndpointIds_.isEmpty()) {
                         if (sliceEndpointIds_.isEmpty()) {
                             sliceEndpointIds_ = other.sliceEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureSliceEndpointIdsIsMutable();
                             sliceEndpointIds_.addAll(other.sliceEndpointIds_);
@@ -37044,7 +36488,7 @@ public final class ContextOuterClass {
                             sliceEndpointIdsBuilder_.dispose();
                             sliceEndpointIdsBuilder_ = null;
                             sliceEndpointIds_ = other.sliceEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             sliceEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSliceEndpointIdsFieldBuilder() : null;
                         } else {
                             sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
@@ -37055,7 +36499,7 @@ public final class ContextOuterClass {
                     if (!other.sliceConstraints_.isEmpty()) {
                         if (sliceConstraints_.isEmpty()) {
                             sliceConstraints_ = other.sliceConstraints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureSliceConstraintsIsMutable();
                             sliceConstraints_.addAll(other.sliceConstraints_);
@@ -37068,7 +36512,7 @@ public final class ContextOuterClass {
                             sliceConstraintsBuilder_.dispose();
                             sliceConstraintsBuilder_ = null;
                             sliceConstraints_ = other.sliceConstraints_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             sliceConstraintsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSliceConstraintsFieldBuilder() : null;
                         } else {
                             sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
@@ -37079,7 +36523,7 @@ public final class ContextOuterClass {
                     if (!other.sliceServiceIds_.isEmpty()) {
                         if (sliceServiceIds_.isEmpty()) {
                             sliceServiceIds_ = other.sliceServiceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                         } else {
                             ensureSliceServiceIdsIsMutable();
                             sliceServiceIds_.addAll(other.sliceServiceIds_);
@@ -37092,7 +36536,7 @@ public final class ContextOuterClass {
                             sliceServiceIdsBuilder_.dispose();
                             sliceServiceIdsBuilder_ = null;
                             sliceServiceIds_ = other.sliceServiceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000010);
                             sliceServiceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSliceServiceIdsFieldBuilder() : null;
                         } else {
                             sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
@@ -37103,7 +36547,7 @@ public final class ContextOuterClass {
                     if (!other.sliceSubsliceIds_.isEmpty()) {
                         if (sliceSubsliceIds_.isEmpty()) {
                             sliceSubsliceIds_ = other.sliceSubsliceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000008);
+                            bitField0_ = (bitField0_ & ~0x00000020);
                         } else {
                             ensureSliceSubsliceIdsIsMutable();
                             sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
@@ -37116,7 +36560,7 @@ public final class ContextOuterClass {
                             sliceSubsliceIdsBuilder_.dispose();
                             sliceSubsliceIdsBuilder_ = null;
                             sliceSubsliceIds_ = other.sliceSubsliceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000008);
+                            bitField0_ = (bitField0_ & ~0x00000020);
                             sliceSubsliceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSliceSubsliceIdsFieldBuilder() : null;
                         } else {
                             sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
@@ -37135,7 +36579,7 @@ public final class ContextOuterClass {
                 if (other.hasTimestamp()) {
                     mergeTimestamp(other.getTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -37147,17 +36591,125 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Slice parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getSliceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (sliceEndpointIdsBuilder_ == null) {
+                                        ensureSliceEndpointIdsIsMutable();
+                                        sliceEndpointIds_.add(m);
+                                    } else {
+                                        sliceEndpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.Constraint m = input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry);
+                                    if (sliceConstraintsBuilder_ == null) {
+                                        ensureSliceConstraintsIsMutable();
+                                        sliceConstraints_.add(m);
+                                    } else {
+                                        sliceConstraintsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    context.ContextOuterClass.ServiceId m = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+                                    if (sliceServiceIdsBuilder_ == null) {
+                                        ensureSliceServiceIdsIsMutable();
+                                        sliceServiceIds_.add(m);
+                                    } else {
+                                        sliceServiceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    context.ContextOuterClass.SliceId m = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+                                    if (sliceSubsliceIdsBuilder_ == null) {
+                                        ensureSliceSubsliceIdsIsMutable();
+                                        sliceSubsliceIds_.add(m);
+                                    } else {
+                                        sliceSubsliceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    input.readMessage(getSliceStatusFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    input.readMessage(getSliceConfigFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    input.readMessage(getSliceOwnerFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            case 82:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000200;
+                                    break;
+                                }
+                            // case 82
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -37172,7 +36724,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceId field is set.
              */
             public boolean hasSliceId() {
-                return sliceIdBuilder_ != null || sliceId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -37196,10 +36748,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceId_ = value;
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -37209,10 +36762,11 @@ public final class ContextOuterClass {
             public Builder setSliceId(context.ContextOuterClass.SliceId.Builder builderForValue) {
                 if (sliceIdBuilder_ == null) {
                     sliceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -37221,15 +36775,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
                 if (sliceIdBuilder_ == null) {
-                    if (sliceId_ != null) {
-                        sliceId_ = context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && sliceId_ != null && sliceId_ != context.ContextOuterClass.SliceId.getDefaultInstance()) {
+                        getSliceIdBuilder().mergeFrom(value);
                     } else {
                         sliceId_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -37237,13 +36792,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceId slice_id = 1;</code>
              */
             public Builder clearSliceId() {
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                    onChanged();
-                } else {
-                    sliceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -37251,6 +36806,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceId slice_id = 1;</code>
              */
             public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getSliceIdFieldBuilder().getBuilder();
             }
@@ -37320,6 +36876,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -37330,6 +36887,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -37345,6 +36903,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -37352,9 +36911,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ = java.util.Collections.emptyList();
 
             private void ensureSliceEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -37506,7 +37065,7 @@ public final class ContextOuterClass {
             public Builder clearSliceEndpointIds() {
                 if (sliceEndpointIdsBuilder_ == null) {
                     sliceEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     sliceEndpointIdsBuilder_.clear();
@@ -37580,7 +37139,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> getSliceEndpointIdsFieldBuilder() {
                 if (sliceEndpointIdsBuilder_ == null) {
-                    sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(sliceEndpointIds_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(sliceEndpointIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     sliceEndpointIds_ = null;
                 }
                 return sliceEndpointIdsBuilder_;
@@ -37589,9 +37148,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ = java.util.Collections.emptyList();
 
             private void ensureSliceConstraintsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -37743,7 +37302,7 @@ public final class ContextOuterClass {
             public Builder clearSliceConstraints() {
                 if (sliceConstraintsBuilder_ == null) {
                     sliceConstraints_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     sliceConstraintsBuilder_.clear();
@@ -37817,7 +37376,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> getSliceConstraintsFieldBuilder() {
                 if (sliceConstraintsBuilder_ == null) {
-                    sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(sliceConstraints_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(sliceConstraints_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     sliceConstraints_ = null;
                 }
                 return sliceConstraintsBuilder_;
@@ -37826,9 +37385,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ = java.util.Collections.emptyList();
 
             private void ensureSliceServiceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
+                if (!((bitField0_ & 0x00000010) != 0)) {
                     sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
-                    bitField0_ |= 0x00000004;
+                    bitField0_ |= 0x00000010;
                 }
             }
 
@@ -37980,7 +37539,7 @@ public final class ContextOuterClass {
             public Builder clearSliceServiceIds() {
                 if (sliceServiceIdsBuilder_ == null) {
                     sliceServiceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
+                    bitField0_ = (bitField0_ & ~0x00000010);
                     onChanged();
                 } else {
                     sliceServiceIdsBuilder_.clear();
@@ -38054,7 +37613,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> getSliceServiceIdsFieldBuilder() {
                 if (sliceServiceIdsBuilder_ == null) {
-                    sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(sliceServiceIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
+                    sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(sliceServiceIds_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
                     sliceServiceIds_ = null;
                 }
                 return sliceServiceIdsBuilder_;
@@ -38063,9 +37622,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ = java.util.Collections.emptyList();
 
             private void ensureSliceSubsliceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000008) != 0)) {
+                if (!((bitField0_ & 0x00000020) != 0)) {
                     sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
-                    bitField0_ |= 0x00000008;
+                    bitField0_ |= 0x00000020;
                 }
             }
 
@@ -38217,7 +37776,7 @@ public final class ContextOuterClass {
             public Builder clearSliceSubsliceIds() {
                 if (sliceSubsliceIdsBuilder_ == null) {
                     sliceSubsliceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000008);
+                    bitField0_ = (bitField0_ & ~0x00000020);
                     onChanged();
                 } else {
                     sliceSubsliceIdsBuilder_.clear();
@@ -38291,7 +37850,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> getSliceSubsliceIdsFieldBuilder() {
                 if (sliceSubsliceIdsBuilder_ == null) {
-                    sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(sliceSubsliceIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
+                    sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(sliceSubsliceIds_, ((bitField0_ & 0x00000020) != 0), getParentForChildren(), isClean());
                     sliceSubsliceIds_ = null;
                 }
                 return sliceSubsliceIdsBuilder_;
@@ -38306,7 +37865,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceStatus field is set.
              */
             public boolean hasSliceStatus() {
-                return sliceStatusBuilder_ != null || sliceStatus_ != null;
+                return ((bitField0_ & 0x00000040) != 0);
             }
 
             /**
@@ -38330,10 +37889,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceStatus_ = value;
-                    onChanged();
                 } else {
                     sliceStatusBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -38343,10 +37903,11 @@ public final class ContextOuterClass {
             public Builder setSliceStatus(context.ContextOuterClass.SliceStatus.Builder builderForValue) {
                 if (sliceStatusBuilder_ == null) {
                     sliceStatus_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceStatusBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -38355,15 +37916,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
                 if (sliceStatusBuilder_ == null) {
-                    if (sliceStatus_ != null) {
-                        sliceStatus_ = context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000040) != 0) && sliceStatus_ != null && sliceStatus_ != context.ContextOuterClass.SliceStatus.getDefaultInstance()) {
+                        getSliceStatusBuilder().mergeFrom(value);
                     } else {
                         sliceStatus_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceStatusBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -38371,13 +37933,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceStatus slice_status = 7;</code>
              */
             public Builder clearSliceStatus() {
-                if (sliceStatusBuilder_ == null) {
-                    sliceStatus_ = null;
-                    onChanged();
-                } else {
-                    sliceStatus_ = null;
+                bitField0_ = (bitField0_ & ~0x00000040);
+                sliceStatus_ = null;
+                if (sliceStatusBuilder_ != null) {
+                    sliceStatusBuilder_.dispose();
                     sliceStatusBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -38385,6 +37947,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceStatus slice_status = 7;</code>
              */
             public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
+                bitField0_ |= 0x00000040;
                 onChanged();
                 return getSliceStatusFieldBuilder().getBuilder();
             }
@@ -38420,7 +37983,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceConfig field is set.
              */
             public boolean hasSliceConfig() {
-                return sliceConfigBuilder_ != null || sliceConfig_ != null;
+                return ((bitField0_ & 0x00000080) != 0);
             }
 
             /**
@@ -38444,10 +38007,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceConfig_ = value;
-                    onChanged();
                 } else {
                     sliceConfigBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -38457,10 +38021,11 @@ public final class ContextOuterClass {
             public Builder setSliceConfig(context.ContextOuterClass.SliceConfig.Builder builderForValue) {
                 if (sliceConfigBuilder_ == null) {
                     sliceConfig_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceConfigBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -38469,15 +38034,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
                 if (sliceConfigBuilder_ == null) {
-                    if (sliceConfig_ != null) {
-                        sliceConfig_ = context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000080) != 0) && sliceConfig_ != null && sliceConfig_ != context.ContextOuterClass.SliceConfig.getDefaultInstance()) {
+                        getSliceConfigBuilder().mergeFrom(value);
                     } else {
                         sliceConfig_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceConfigBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -38485,13 +38051,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceConfig slice_config = 8;</code>
              */
             public Builder clearSliceConfig() {
-                if (sliceConfigBuilder_ == null) {
-                    sliceConfig_ = null;
-                    onChanged();
-                } else {
-                    sliceConfig_ = null;
+                bitField0_ = (bitField0_ & ~0x00000080);
+                sliceConfig_ = null;
+                if (sliceConfigBuilder_ != null) {
+                    sliceConfigBuilder_.dispose();
                     sliceConfigBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -38499,6 +38065,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceConfig slice_config = 8;</code>
              */
             public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+                bitField0_ |= 0x00000080;
                 onChanged();
                 return getSliceConfigFieldBuilder().getBuilder();
             }
@@ -38534,7 +38101,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceOwner field is set.
              */
             public boolean hasSliceOwner() {
-                return sliceOwnerBuilder_ != null || sliceOwner_ != null;
+                return ((bitField0_ & 0x00000100) != 0);
             }
 
             /**
@@ -38558,10 +38125,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceOwner_ = value;
-                    onChanged();
                 } else {
                     sliceOwnerBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -38571,10 +38139,11 @@ public final class ContextOuterClass {
             public Builder setSliceOwner(context.ContextOuterClass.SliceOwner.Builder builderForValue) {
                 if (sliceOwnerBuilder_ == null) {
                     sliceOwner_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceOwnerBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -38583,15 +38152,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
                 if (sliceOwnerBuilder_ == null) {
-                    if (sliceOwner_ != null) {
-                        sliceOwner_ = context.ContextOuterClass.SliceOwner.newBuilder(sliceOwner_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000100) != 0) && sliceOwner_ != null && sliceOwner_ != context.ContextOuterClass.SliceOwner.getDefaultInstance()) {
+                        getSliceOwnerBuilder().mergeFrom(value);
                     } else {
                         sliceOwner_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceOwnerBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -38599,13 +38169,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceOwner slice_owner = 9;</code>
              */
             public Builder clearSliceOwner() {
-                if (sliceOwnerBuilder_ == null) {
-                    sliceOwner_ = null;
-                    onChanged();
-                } else {
-                    sliceOwner_ = null;
+                bitField0_ = (bitField0_ & ~0x00000100);
+                sliceOwner_ = null;
+                if (sliceOwnerBuilder_ != null) {
+                    sliceOwnerBuilder_.dispose();
                     sliceOwnerBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -38613,6 +38183,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceOwner slice_owner = 9;</code>
              */
             public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
+                bitField0_ |= 0x00000100;
                 onChanged();
                 return getSliceOwnerFieldBuilder().getBuilder();
             }
@@ -38648,7 +38219,7 @@ public final class ContextOuterClass {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000200) != 0);
             }
 
             /**
@@ -38672,10 +38243,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -38685,10 +38257,11 @@ public final class ContextOuterClass {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -38697,15 +38270,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000200) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -38713,13 +38287,13 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 10;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000200);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -38727,6 +38301,7 @@ public final class ContextOuterClass {
              * <code>.context.Timestamp timestamp = 10;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000200;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -38780,7 +38355,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Slice parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Slice(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -38855,63 +38440,6 @@ public final class ContextOuterClass {
             return new SliceOwner();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceOwner(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 (ownerUuid_ != null) {
-                                    subBuilder = ownerUuid_.toBuilder();
-                                }
-                                ownerUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(ownerUuid_);
-                                    ownerUuid_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                ownerString_ = 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_SliceOwner_descriptor;
         }
@@ -38948,12 +38476,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
-            return getOwnerUuid();
+            return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
         }
 
         public static final int OWNER_STRING_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object ownerString_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object ownerString_ = "";
 
         /**
          * <code>string owner_string = 2;</code>
@@ -39006,10 +38535,10 @@ public final class ContextOuterClass {
             if (ownerUuid_ != null) {
                 output.writeMessage(1, getOwnerUuid());
             }
-            if (!getOwnerStringBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ownerString_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ownerString_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -39021,10 +38550,10 @@ public final class ContextOuterClass {
             if (ownerUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOwnerUuid());
             }
-            if (!getOwnerStringBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ownerString_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ownerString_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -39046,7 +38575,7 @@ public final class ContextOuterClass {
             }
             if (!getOwnerString().equals(other.getOwnerString()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -39064,7 +38593,7 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + OWNER_STRING_FIELD_NUMBER;
             hash = (53 * hash) + getOwnerString().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -39158,26 +38687,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceOwner.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 (ownerUuidBuilder_ == null) {
-                    ownerUuid_ = null;
-                } else {
-                    ownerUuid_ = null;
+                bitField0_ = 0;
+                ownerUuid_ = null;
+                if (ownerUuidBuilder_ != null) {
+                    ownerUuidBuilder_.dispose();
                     ownerUuidBuilder_ = null;
                 }
                 ownerString_ = "";
@@ -39206,44 +38728,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceOwner buildPartial() {
                 context.ContextOuterClass.SliceOwner result = new context.ContextOuterClass.SliceOwner(this);
-                if (ownerUuidBuilder_ == null) {
-                    result.ownerUuid_ = ownerUuid_;
-                } else {
-                    result.ownerUuid_ = ownerUuidBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.ownerString_ = ownerString_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.SliceOwner result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.ownerUuid_ = ownerUuidBuilder_ == null ? ownerUuid_ : ownerUuidBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.ownerString_ = ownerString_;
+                }
             }
 
             @java.lang.Override
@@ -39264,9 +38763,10 @@ public final class ContextOuterClass {
                 }
                 if (!other.getOwnerString().isEmpty()) {
                     ownerString_ = other.ownerString_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -39278,20 +38778,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceOwner parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getOwnerUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    ownerString_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceOwner) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid ownerUuid_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> ownerUuidBuilder_;
@@ -39301,7 +38835,7 @@ public final class ContextOuterClass {
              * @return Whether the ownerUuid field is set.
              */
             public boolean hasOwnerUuid() {
-                return ownerUuidBuilder_ != null || ownerUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -39325,10 +38859,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     ownerUuid_ = value;
-                    onChanged();
                 } else {
                     ownerUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -39338,10 +38873,11 @@ public final class ContextOuterClass {
             public Builder setOwnerUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (ownerUuidBuilder_ == null) {
                     ownerUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     ownerUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -39350,15 +38886,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeOwnerUuid(context.ContextOuterClass.Uuid value) {
                 if (ownerUuidBuilder_ == null) {
-                    if (ownerUuid_ != null) {
-                        ownerUuid_ = context.ContextOuterClass.Uuid.newBuilder(ownerUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && ownerUuid_ != null && ownerUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getOwnerUuidBuilder().mergeFrom(value);
                     } else {
                         ownerUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     ownerUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -39366,13 +38903,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid owner_uuid = 1;</code>
              */
             public Builder clearOwnerUuid() {
-                if (ownerUuidBuilder_ == null) {
-                    ownerUuid_ = null;
-                    onChanged();
-                } else {
-                    ownerUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                ownerUuid_ = null;
+                if (ownerUuidBuilder_ != null) {
+                    ownerUuidBuilder_.dispose();
                     ownerUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -39380,6 +38917,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid owner_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getOwnerUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getOwnerUuidFieldBuilder().getBuilder();
             }
@@ -39449,6 +38987,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 ownerString_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -39459,6 +38998,7 @@ public final class ContextOuterClass {
              */
             public Builder clearOwnerString() {
                 ownerString_ = getDefaultInstance().getOwnerString();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -39474,6 +39014,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 ownerString_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -39505,7 +39046,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceOwner parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceOwner(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -39563,50 +39114,6 @@ public final class ContextOuterClass {
             return new SliceStatus();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceStatus(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();
-                                sliceStatus_ = 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_SliceStatus_descriptor;
         }
@@ -39618,7 +39125,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_STATUS_FIELD_NUMBER = 1;
 
-        private int sliceStatus_;
+        private int sliceStatus_ = 0;
 
         /**
          * <code>.context.SliceStatusEnum slice_status = 1;</code>
@@ -39635,8 +39142,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+            context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.forNumber(sliceStatus_);
             return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
         }
 
@@ -39658,7 +39164,7 @@ public final class ContextOuterClass {
             if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
                 output.writeEnum(1, sliceStatus_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -39670,7 +39176,7 @@ public final class ContextOuterClass {
             if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, sliceStatus_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -39686,7 +39192,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
             if (sliceStatus_ != other.sliceStatus_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -39700,7 +39206,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
             hash = (53 * hash) + sliceStatus_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -39794,22 +39300,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceStatus.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();
+                bitField0_ = 0;
                 sliceStatus_ = 0;
                 return this;
             }
@@ -39836,39 +39336,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceStatus buildPartial() {
                 context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
-                result.sliceStatus_ = sliceStatus_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.SliceStatus result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.sliceStatus_ = sliceStatus_;
+                }
             }
 
             @java.lang.Override
@@ -39887,7 +39366,7 @@ public final class ContextOuterClass {
                 if (other.sliceStatus_ != 0) {
                     setSliceStatusValue(other.getSliceStatusValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -39899,20 +39378,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceStatus parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    sliceStatus_ = input.readEnum();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int sliceStatus_ = 0;
 
             /**
@@ -39931,6 +39437,7 @@ public final class ContextOuterClass {
              */
             public Builder setSliceStatusValue(int value) {
                 sliceStatus_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -39941,8 +39448,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+                context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.forNumber(sliceStatus_);
                 return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
             }
 
@@ -39955,6 +39461,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000001;
                 sliceStatus_ = value.getNumber();
                 onChanged();
                 return this;
@@ -39965,6 +39472,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearSliceStatus() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 sliceStatus_ = 0;
                 onChanged();
                 return this;
@@ -39997,7 +39505,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceStatus parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceStatus(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -40068,57 +39586,6 @@ public final class ContextOuterClass {
             return new SliceConfig();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceConfig(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_SliceConfig_descriptor;
         }
@@ -40130,6 +39597,7 @@ public final class ContextOuterClass {
 
         public static final int CONFIG_RULES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
 
         /**
@@ -40190,7 +39658,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 output.writeMessage(1, configRules_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -40202,7 +39670,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < configRules_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, configRules_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -40218,7 +39686,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
             if (!getConfigRulesList().equals(other.getConfigRulesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -40234,7 +39702,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
                 hash = (53 * hash) + getConfigRulesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -40328,29 +39796,23 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceConfig.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();
+                bitField0_ = 0;
                 if (configRulesBuilder_ == null) {
                     configRules_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    configRules_ = null;
                     configRulesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -40376,7 +39838,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceConfig buildPartial() {
                 context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.SliceConfig result) {
                 if (configRulesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         configRules_ = java.util.Collections.unmodifiableList(configRules_);
@@ -40386,38 +39856,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.SliceConfig result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -40457,7 +39899,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -40469,17 +39911,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceConfig parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ConfigRule m = input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry);
+                                    if (configRulesBuilder_ == null) {
+                                        ensureConfigRulesIsMutable();
+                                        configRules_.add(m);
+                                    } else {
+                                        configRulesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -40749,7 +40221,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceConfig(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -40820,57 +40302,6 @@ public final class ContextOuterClass {
             return new SliceIdList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceIdList(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)) {
-                                    sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                sliceIds_.add(input.readMessage(context.ContextOuterClass.SliceId.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)) {
-                    sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
         }
@@ -40882,6 +40313,7 @@ public final class ContextOuterClass {
 
         public static final int SLICE_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
 
         /**
@@ -40942,7 +40374,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < sliceIds_.size(); i++) {
                 output.writeMessage(1, sliceIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -40954,7 +40386,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < sliceIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, sliceIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -40970,7 +40402,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
             if (!getSliceIdsList().equals(other.getSliceIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -40986,7 +40418,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getSliceIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -41080,29 +40512,23 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getSliceIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (sliceIdsBuilder_ == null) {
                     sliceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    sliceIds_ = null;
                     sliceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -41128,7 +40554,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceIdList buildPartial() {
                 context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.SliceIdList result) {
                 if (sliceIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
@@ -41138,38 +40572,10 @@ public final class ContextOuterClass {
                 } else {
                     result.sliceIds_ = sliceIdsBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.SliceIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -41209,7 +40615,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -41221,17 +40627,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceIdList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.SliceId m = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+                                    if (sliceIdsBuilder_ == null) {
+                                        ensureSliceIdsIsMutable();
+                                        sliceIds_.add(m);
+                                    } else {
+                                        sliceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -41501,7 +40937,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceIdList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceIdList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -41572,57 +41018,6 @@ public final class ContextOuterClass {
             return new SliceList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceList(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)) {
-                                    slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                slices_.add(input.readMessage(context.ContextOuterClass.Slice.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)) {
-                    slices_ = java.util.Collections.unmodifiableList(slices_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
         }
@@ -41634,6 +41029,7 @@ public final class ContextOuterClass {
 
         public static final int SLICES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Slice> slices_;
 
         /**
@@ -41694,7 +41090,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < slices_.size(); i++) {
                 output.writeMessage(1, slices_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -41706,7 +41102,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < slices_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, slices_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -41722,7 +41118,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
             if (!getSlicesList().equals(other.getSlicesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -41738,7 +41134,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SLICES_FIELD_NUMBER;
                 hash = (53 * hash) + getSlicesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -41832,29 +41228,23 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getSlicesFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (slicesBuilder_ == null) {
                     slices_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    slices_ = null;
                     slicesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -41880,7 +41270,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceList buildPartial() {
                 context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.SliceList result) {
                 if (slicesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         slices_ = java.util.Collections.unmodifiableList(slices_);
@@ -41890,38 +41288,10 @@ public final class ContextOuterClass {
                 } else {
                     result.slices_ = slicesBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.SliceList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -41961,7 +41331,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -41973,17 +41343,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Slice m = input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry);
+                                    if (slicesBuilder_ == null) {
+                                        ensureSlicesIsMutable();
+                                        slices_.add(m);
+                                    } else {
+                                        slicesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -42253,7 +41653,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -42345,82 +41755,6 @@ public final class ContextOuterClass {
             return new SliceFilter();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceFilter(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.SliceIdList.Builder subBuilder = null;
-                                if (sliceIds_ != null) {
-                                    subBuilder = sliceIds_.toBuilder();
-                                }
-                                sliceIds_ = input.readMessage(context.ContextOuterClass.SliceIdList.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceIds_);
-                                    sliceIds_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 16:
-                            {
-                                includeEndpointIds_ = input.readBool();
-                                break;
-                            }
-                        case 24:
-                            {
-                                includeConstraints_ = input.readBool();
-                                break;
-                            }
-                        case 32:
-                            {
-                                includeServiceIds_ = input.readBool();
-                                break;
-                            }
-                        case 40:
-                            {
-                                includeSubsliceIds_ = input.readBool();
-                                break;
-                            }
-                        case 48:
-                            {
-                                includeConfigRules_ = 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_SliceFilter_descriptor;
         }
@@ -42457,12 +41791,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceIdListOrBuilder getSliceIdsOrBuilder() {
-            return getSliceIds();
+            return sliceIds_ == null ? context.ContextOuterClass.SliceIdList.getDefaultInstance() : sliceIds_;
         }
 
         public static final int INCLUDE_ENDPOINT_IDS_FIELD_NUMBER = 2;
 
-        private boolean includeEndpointIds_;
+        private boolean includeEndpointIds_ = false;
 
         /**
          * <code>bool include_endpoint_ids = 2;</code>
@@ -42475,7 +41809,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_CONSTRAINTS_FIELD_NUMBER = 3;
 
-        private boolean includeConstraints_;
+        private boolean includeConstraints_ = false;
 
         /**
          * <code>bool include_constraints = 3;</code>
@@ -42488,7 +41822,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_SERVICE_IDS_FIELD_NUMBER = 4;
 
-        private boolean includeServiceIds_;
+        private boolean includeServiceIds_ = false;
 
         /**
          * <code>bool include_service_ids = 4;</code>
@@ -42501,7 +41835,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_SUBSLICE_IDS_FIELD_NUMBER = 5;
 
-        private boolean includeSubsliceIds_;
+        private boolean includeSubsliceIds_ = false;
 
         /**
          * <code>bool include_subslice_ids = 5;</code>
@@ -42514,7 +41848,7 @@ public final class ContextOuterClass {
 
         public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 6;
 
-        private boolean includeConfigRules_;
+        private boolean includeConfigRules_ = false;
 
         /**
          * <code>bool include_config_rules = 6;</code>
@@ -42558,7 +41892,7 @@ public final class ContextOuterClass {
             if (includeConfigRules_ != false) {
                 output.writeBool(6, includeConfigRules_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -42585,7 +41919,7 @@ public final class ContextOuterClass {
             if (includeConfigRules_ != false) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, includeConfigRules_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -42615,7 +41949,7 @@ public final class ContextOuterClass {
                 return false;
             if (getIncludeConfigRules() != other.getIncludeConfigRules())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -42641,7 +41975,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeSubsliceIds());
             hash = (37 * hash) + INCLUDE_CONFIG_RULES_FIELD_NUMBER;
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeConfigRules());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -42735,26 +42069,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceFilter.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 (sliceIdsBuilder_ == null) {
-                    sliceIds_ = null;
-                } else {
-                    sliceIds_ = null;
+                bitField0_ = 0;
+                sliceIds_ = null;
+                if (sliceIdsBuilder_ != null) {
+                    sliceIdsBuilder_.dispose();
                     sliceIdsBuilder_ = null;
                 }
                 includeEndpointIds_ = false;
@@ -42787,48 +42114,33 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceFilter buildPartial() {
                 context.ContextOuterClass.SliceFilter result = new context.ContextOuterClass.SliceFilter(this);
-                if (sliceIdsBuilder_ == null) {
-                    result.sliceIds_ = sliceIds_;
-                } else {
-                    result.sliceIds_ = sliceIdsBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.includeEndpointIds_ = includeEndpointIds_;
-                result.includeConstraints_ = includeConstraints_;
-                result.includeServiceIds_ = includeServiceIds_;
-                result.includeSubsliceIds_ = includeSubsliceIds_;
-                result.includeConfigRules_ = includeConfigRules_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.SliceFilter result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.sliceIds_ = sliceIdsBuilder_ == null ? sliceIds_ : sliceIdsBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.includeEndpointIds_ = includeEndpointIds_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.includeConstraints_ = includeConstraints_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.includeServiceIds_ = includeServiceIds_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.includeSubsliceIds_ = includeSubsliceIds_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.includeConfigRules_ = includeConfigRules_;
+                }
             }
 
             @java.lang.Override
@@ -42862,7 +42174,7 @@ public final class ContextOuterClass {
                 if (other.getIncludeConfigRules() != false) {
                     setIncludeConfigRules(other.getIncludeConfigRules());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -42874,20 +42186,82 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceFilter parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getSliceIdsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    includeEndpointIds_ = input.readBool();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 24:
+                                {
+                                    includeConstraints_ = input.readBool();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    includeServiceIds_ = input.readBool();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 40:
+                                {
+                                    includeSubsliceIds_ = input.readBool();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            case 48:
+                                {
+                                    includeConfigRules_ = input.readBool();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 48
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceFilter) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.SliceIdList sliceIds_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.SliceIdList, context.ContextOuterClass.SliceIdList.Builder, context.ContextOuterClass.SliceIdListOrBuilder> sliceIdsBuilder_;
@@ -42897,7 +42271,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceIds field is set.
              */
             public boolean hasSliceIds() {
-                return sliceIdsBuilder_ != null || sliceIds_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -42921,10 +42295,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceIds_ = value;
-                    onChanged();
                 } else {
                     sliceIdsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -42934,10 +42309,11 @@ public final class ContextOuterClass {
             public Builder setSliceIds(context.ContextOuterClass.SliceIdList.Builder builderForValue) {
                 if (sliceIdsBuilder_ == null) {
                     sliceIds_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceIdsBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -42946,15 +42322,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceIds(context.ContextOuterClass.SliceIdList value) {
                 if (sliceIdsBuilder_ == null) {
-                    if (sliceIds_ != null) {
-                        sliceIds_ = context.ContextOuterClass.SliceIdList.newBuilder(sliceIds_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && sliceIds_ != null && sliceIds_ != context.ContextOuterClass.SliceIdList.getDefaultInstance()) {
+                        getSliceIdsBuilder().mergeFrom(value);
                     } else {
                         sliceIds_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceIdsBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -42962,13 +42339,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceIdList slice_ids = 1;</code>
              */
             public Builder clearSliceIds() {
-                if (sliceIdsBuilder_ == null) {
-                    sliceIds_ = null;
-                    onChanged();
-                } else {
-                    sliceIds_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                sliceIds_ = null;
+                if (sliceIdsBuilder_ != null) {
+                    sliceIdsBuilder_.dispose();
                     sliceIdsBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -42976,6 +42353,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceIdList slice_ids = 1;</code>
              */
             public context.ContextOuterClass.SliceIdList.Builder getSliceIdsBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getSliceIdsFieldBuilder().getBuilder();
             }
@@ -43020,6 +42398,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeEndpointIds(boolean value) {
                 includeEndpointIds_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -43029,6 +42408,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeEndpointIds() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 includeEndpointIds_ = false;
                 onChanged();
                 return this;
@@ -43052,6 +42432,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeConstraints(boolean value) {
                 includeConstraints_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -43061,6 +42442,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeConstraints() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 includeConstraints_ = false;
                 onChanged();
                 return this;
@@ -43084,6 +42466,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeServiceIds(boolean value) {
                 includeServiceIds_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -43093,6 +42476,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeServiceIds() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 includeServiceIds_ = false;
                 onChanged();
                 return this;
@@ -43116,6 +42500,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeSubsliceIds(boolean value) {
                 includeSubsliceIds_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -43125,6 +42510,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeSubsliceIds() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 includeSubsliceIds_ = false;
                 onChanged();
                 return this;
@@ -43148,6 +42534,7 @@ public final class ContextOuterClass {
              */
             public Builder setIncludeConfigRules(boolean value) {
                 includeConfigRules_ = value;
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return this;
             }
@@ -43157,6 +42544,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIncludeConfigRules() {
+                bitField0_ = (bitField0_ & ~0x00000020);
                 includeConfigRules_ = false;
                 onChanged();
                 return this;
@@ -43189,7 +42577,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceFilter parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceFilter(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -43268,70 +42666,6 @@ public final class ContextOuterClass {
             return new SliceEvent();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SliceEvent(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.SliceId.Builder subBuilder = null;
-                                if (sliceId_ != null) {
-                                    subBuilder = sliceId_.toBuilder();
-                                }
-                                sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceId_);
-                                    sliceId_ = 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_SliceEvent_descriptor;
         }
@@ -43368,7 +42702,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int SLICE_ID_FIELD_NUMBER = 2;
@@ -43398,7 +42732,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-            return getSliceId();
+            return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -43422,7 +42756,7 @@ public final class ContextOuterClass {
             if (sliceId_ != null) {
                 output.writeMessage(2, getSliceId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -43437,7 +42771,7 @@ public final class ContextOuterClass {
             if (sliceId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSliceId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -43463,7 +42797,7 @@ public final class ContextOuterClass {
                 if (!getSliceId().equals(other.getSliceId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -43483,7 +42817,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getSliceId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -43577,32 +42911,24 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.SliceEvent.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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                } else {
-                    sliceId_ = null;
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
                 return this;
@@ -43630,48 +42956,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.SliceEvent buildPartial() {
                 context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-                if (eventBuilder_ == null) {
-                    result.event_ = event_;
-                } else {
-                    result.event_ = eventBuilder_.build();
-                }
-                if (sliceIdBuilder_ == null) {
-                    result.sliceId_ = sliceId_;
-                } else {
-                    result.sliceId_ = sliceIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.SliceEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.sliceId_ = sliceIdBuilder_ == null ? sliceId_ : sliceIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -43693,7 +42992,7 @@ public final class ContextOuterClass {
                 if (other.hasSliceId()) {
                     mergeSliceId(other.getSliceId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -43705,20 +43004,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.SliceEvent parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getSliceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -43728,7 +43061,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -43752,10 +43085,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -43765,10 +43099,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -43777,15 +43112,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -43793,13 +43129,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -43807,6 +43143,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -43842,7 +43179,7 @@ public final class ContextOuterClass {
              * @return Whether the sliceId field is set.
              */
             public boolean hasSliceId() {
-                return sliceIdBuilder_ != null || sliceId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -43866,10 +43203,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     sliceId_ = value;
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -43879,10 +43217,11 @@ public final class ContextOuterClass {
             public Builder setSliceId(context.ContextOuterClass.SliceId.Builder builderForValue) {
                 if (sliceIdBuilder_ == null) {
                     sliceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -43891,15 +43230,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
                 if (sliceIdBuilder_ == null) {
-                    if (sliceId_ != null) {
-                        sliceId_ = context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && sliceId_ != null && sliceId_ != context.ContextOuterClass.SliceId.getDefaultInstance()) {
+                        getSliceIdBuilder().mergeFrom(value);
                     } else {
                         sliceId_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -43907,13 +43247,13 @@ public final class ContextOuterClass {
              * <code>.context.SliceId slice_id = 2;</code>
              */
             public Builder clearSliceId() {
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                    onChanged();
-                } else {
-                    sliceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -43921,6 +43261,7 @@ public final class ContextOuterClass {
              * <code>.context.SliceId slice_id = 2;</code>
              */
             public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getSliceIdFieldBuilder().getBuilder();
             }
@@ -43974,7 +43315,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public SliceEvent parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SliceEvent(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -44040,57 +43391,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -44127,7 +43427,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-            return getConnectionUuid();
+            return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -44148,7 +43448,7 @@ public final class ContextOuterClass {
             if (connectionUuid_ != null) {
                 output.writeMessage(1, getConnectionUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -44160,7 +43460,7 @@ public final class ContextOuterClass {
             if (connectionUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnectionUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -44180,7 +43480,7 @@ public final class ContextOuterClass {
                 if (!getConnectionUuid().equals(other.getConnectionUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -44196,7 +43496,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getConnectionUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -44294,26 +43594,19 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                connectionUuid_ = null;
+                if (connectionUuidBuilder_ != null) {
+                    connectionUuidBuilder_.dispose();
                     connectionUuidBuilder_ = null;
                 }
                 return this;
@@ -44341,43 +43634,18 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.connectionUuid_ = connectionUuidBuilder_ == null ? connectionUuid_ : connectionUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -44396,7 +43664,7 @@ public final class ContextOuterClass {
                 if (other.hasConnectionUuid()) {
                     mergeConnectionUuid(other.getConnectionUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -44408,20 +43676,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getConnectionUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid connectionUuid_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
@@ -44431,7 +43726,7 @@ public final class ContextOuterClass {
              * @return Whether the connectionUuid field is set.
              */
             public boolean hasConnectionUuid() {
-                return connectionUuidBuilder_ != null || connectionUuid_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -44455,10 +43750,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     connectionUuid_ = value;
-                    onChanged();
                 } else {
                     connectionUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -44468,10 +43764,11 @@ public final class ContextOuterClass {
             public Builder setConnectionUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (connectionUuidBuilder_ == null) {
                     connectionUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     connectionUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -44480,15 +43777,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
                 if (connectionUuidBuilder_ == null) {
-                    if (connectionUuid_ != null) {
-                        connectionUuid_ = context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && connectionUuid_ != null && connectionUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getConnectionUuidBuilder().mergeFrom(value);
                     } else {
                         connectionUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     connectionUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -44496,13 +43794,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid connection_uuid = 1;</code>
              */
             public Builder clearConnectionUuid() {
-                if (connectionUuidBuilder_ == null) {
-                    connectionUuid_ = null;
-                    onChanged();
-                } else {
-                    connectionUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                connectionUuid_ = null;
+                if (connectionUuidBuilder_ != null) {
+                    connectionUuidBuilder_.dispose();
                     connectionUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -44510,6 +43808,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid connection_uuid = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getConnectionUuidFieldBuilder().getBuilder();
             }
@@ -44563,7 +43862,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -44621,50 +43930,6 @@ public final class ContextOuterClass {
             return new ConnectionSettings_L0();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionSettings_L0(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();
-                                lspSymbolicName_ = 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_ConnectionSettings_L0_descriptor;
         }
@@ -44676,7 +43941,8 @@ public final class ContextOuterClass {
 
         public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object lspSymbolicName_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object lspSymbolicName_ = "";
 
         /**
          * <code>string lsp_symbolic_name = 1;</code>
@@ -44726,10 +43992,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getLspSymbolicNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lspSymbolicName_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -44738,10 +44004,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getLspSymbolicNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lspSymbolicName_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -44757,7 +44023,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
             if (!getLspSymbolicName().equals(other.getLspSymbolicName()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -44771,7 +44037,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
             hash = (53 * hash) + getLspSymbolicName().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -44865,22 +44131,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionSettings_L0.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();
+                bitField0_ = 0;
                 lspSymbolicName_ = "";
                 return this;
             }
@@ -44907,39 +44167,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
                 context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
-                result.lspSymbolicName_ = lspSymbolicName_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionSettings_L0 result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.lspSymbolicName_ = lspSymbolicName_;
+                }
             }
 
             @java.lang.Override
@@ -44957,9 +44196,10 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getLspSymbolicName().isEmpty()) {
                     lspSymbolicName_ = other.lspSymbolicName_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -44971,20 +44211,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    lspSymbolicName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object lspSymbolicName_ = "";
 
             /**
@@ -45028,6 +44295,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 lspSymbolicName_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -45038,6 +44306,7 @@ public final class ContextOuterClass {
              */
             public Builder clearLspSymbolicName() {
                 lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -45053,6 +44322,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 lspSymbolicName_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -45084,7 +44354,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionSettings_L0 parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionSettings_L0(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -45179,76 +44459,6 @@ public final class ContextOuterClass {
             return new ConnectionSettings_L2();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionSettings_L2(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();
-                                srcMacAddress_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                dstMacAddress_ = s;
-                                break;
-                            }
-                        case 24:
-                            {
-                                etherType_ = input.readUInt32();
-                                break;
-                            }
-                        case 32:
-                            {
-                                vlanId_ = input.readUInt32();
-                                break;
-                            }
-                        case 40:
-                            {
-                                mplsLabel_ = input.readUInt32();
-                                break;
-                            }
-                        case 48:
-                            {
-                                mplsTrafficClass_ = 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_ConnectionSettings_L2_descriptor;
         }
@@ -45260,7 +44470,8 @@ public final class ContextOuterClass {
 
         public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object srcMacAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object srcMacAddress_ = "";
 
         /**
          * <code>string src_mac_address = 1;</code>
@@ -45297,7 +44508,8 @@ public final class ContextOuterClass {
 
         public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object dstMacAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object dstMacAddress_ = "";
 
         /**
          * <code>string dst_mac_address = 2;</code>
@@ -45334,7 +44546,7 @@ public final class ContextOuterClass {
 
         public static final int ETHER_TYPE_FIELD_NUMBER = 3;
 
-        private int etherType_;
+        private int etherType_ = 0;
 
         /**
          * <code>uint32 ether_type = 3;</code>
@@ -45347,7 +44559,7 @@ public final class ContextOuterClass {
 
         public static final int VLAN_ID_FIELD_NUMBER = 4;
 
-        private int vlanId_;
+        private int vlanId_ = 0;
 
         /**
          * <code>uint32 vlan_id = 4;</code>
@@ -45360,7 +44572,7 @@ public final class ContextOuterClass {
 
         public static final int MPLS_LABEL_FIELD_NUMBER = 5;
 
-        private int mplsLabel_;
+        private int mplsLabel_ = 0;
 
         /**
          * <code>uint32 mpls_label = 5;</code>
@@ -45373,7 +44585,7 @@ public final class ContextOuterClass {
 
         public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
 
-        private int mplsTrafficClass_;
+        private int mplsTrafficClass_ = 0;
 
         /**
          * <code>uint32 mpls_traffic_class = 6;</code>
@@ -45399,10 +44611,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getSrcMacAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcMacAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
             }
-            if (!getDstMacAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstMacAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
             }
             if (etherType_ != 0) {
@@ -45417,7 +44629,7 @@ public final class ContextOuterClass {
             if (mplsTrafficClass_ != 0) {
                 output.writeUInt32(6, mplsTrafficClass_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -45426,10 +44638,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getSrcMacAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcMacAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
             }
-            if (!getDstMacAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstMacAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
             }
             if (etherType_ != 0) {
@@ -45444,7 +44656,7 @@ public final class ContextOuterClass {
             if (mplsTrafficClass_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(6, mplsTrafficClass_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -45470,7 +44682,7 @@ public final class ContextOuterClass {
                 return false;
             if (getMplsTrafficClass() != other.getMplsTrafficClass())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -45494,7 +44706,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getMplsLabel();
             hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
             hash = (53 * hash) + getMplsTrafficClass();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -45588,22 +44800,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionSettings_L2.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();
+                bitField0_ = 0;
                 srcMacAddress_ = "";
                 dstMacAddress_ = "";
                 etherType_ = 0;
@@ -45635,44 +44841,33 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
                 context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
-                result.srcMacAddress_ = srcMacAddress_;
-                result.dstMacAddress_ = dstMacAddress_;
-                result.etherType_ = etherType_;
-                result.vlanId_ = vlanId_;
-                result.mplsLabel_ = mplsLabel_;
-                result.mplsTrafficClass_ = mplsTrafficClass_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionSettings_L2 result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.srcMacAddress_ = srcMacAddress_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.dstMacAddress_ = dstMacAddress_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.etherType_ = etherType_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.vlanId_ = vlanId_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.mplsLabel_ = mplsLabel_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.mplsTrafficClass_ = mplsTrafficClass_;
+                }
             }
 
             @java.lang.Override
@@ -45690,10 +44885,12 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getSrcMacAddress().isEmpty()) {
                     srcMacAddress_ = other.srcMacAddress_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
                 if (!other.getDstMacAddress().isEmpty()) {
                     dstMacAddress_ = other.dstMacAddress_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (other.getEtherType() != 0) {
@@ -45708,7 +44905,7 @@ public final class ContextOuterClass {
                 if (other.getMplsTrafficClass() != 0) {
                     setMplsTrafficClass(other.getMplsTrafficClass());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -45720,20 +44917,82 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    srcMacAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    dstMacAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    etherType_ = input.readUInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    vlanId_ = input.readUInt32();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 40:
+                                {
+                                    mplsLabel_ = input.readUInt32();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            case 48:
+                                {
+                                    mplsTrafficClass_ = input.readUInt32();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 48
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object srcMacAddress_ = "";
 
             /**
@@ -45777,6 +45036,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 srcMacAddress_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -45787,6 +45047,7 @@ public final class ContextOuterClass {
              */
             public Builder clearSrcMacAddress() {
                 srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -45802,6 +45063,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 srcMacAddress_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -45849,6 +45111,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 dstMacAddress_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -45859,6 +45122,7 @@ public final class ContextOuterClass {
              */
             public Builder clearDstMacAddress() {
                 dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -45874,6 +45138,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 dstMacAddress_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -45896,6 +45161,7 @@ public final class ContextOuterClass {
              */
             public Builder setEtherType(int value) {
                 etherType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -45905,6 +45171,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearEtherType() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 etherType_ = 0;
                 onChanged();
                 return this;
@@ -45928,6 +45195,7 @@ public final class ContextOuterClass {
              */
             public Builder setVlanId(int value) {
                 vlanId_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -45937,6 +45205,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearVlanId() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 vlanId_ = 0;
                 onChanged();
                 return this;
@@ -45960,6 +45229,7 @@ public final class ContextOuterClass {
              */
             public Builder setMplsLabel(int value) {
                 mplsLabel_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -45969,6 +45239,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearMplsLabel() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 mplsLabel_ = 0;
                 onChanged();
                 return this;
@@ -45992,6 +45263,7 @@ public final class ContextOuterClass {
              */
             public Builder setMplsTrafficClass(int value) {
                 mplsTrafficClass_ = value;
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return this;
             }
@@ -46001,6 +45273,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearMplsTrafficClass() {
+                bitField0_ = (bitField0_ & ~0x00000020);
                 mplsTrafficClass_ = 0;
                 onChanged();
                 return this;
@@ -46033,7 +45306,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionSettings_L2 parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionSettings_L2(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -46122,71 +45405,6 @@ public final class ContextOuterClass {
             return new ConnectionSettings_L3();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionSettings_L3(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();
-                                srcIpAddress_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                dstIpAddress_ = s;
-                                break;
-                            }
-                        case 24:
-                            {
-                                dscp_ = input.readUInt32();
-                                break;
-                            }
-                        case 32:
-                            {
-                                protocol_ = input.readUInt32();
-                                break;
-                            }
-                        case 40:
-                            {
-                                ttl_ = 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_ConnectionSettings_L3_descriptor;
         }
@@ -46198,7 +45416,8 @@ public final class ContextOuterClass {
 
         public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object srcIpAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object srcIpAddress_ = "";
 
         /**
          * <code>string src_ip_address = 1;</code>
@@ -46235,7 +45454,8 @@ public final class ContextOuterClass {
 
         public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object dstIpAddress_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object dstIpAddress_ = "";
 
         /**
          * <code>string dst_ip_address = 2;</code>
@@ -46272,7 +45492,7 @@ public final class ContextOuterClass {
 
         public static final int DSCP_FIELD_NUMBER = 3;
 
-        private int dscp_;
+        private int dscp_ = 0;
 
         /**
          * <code>uint32 dscp = 3;</code>
@@ -46285,7 +45505,7 @@ public final class ContextOuterClass {
 
         public static final int PROTOCOL_FIELD_NUMBER = 4;
 
-        private int protocol_;
+        private int protocol_ = 0;
 
         /**
          * <code>uint32 protocol = 4;</code>
@@ -46298,7 +45518,7 @@ public final class ContextOuterClass {
 
         public static final int TTL_FIELD_NUMBER = 5;
 
-        private int ttl_;
+        private int ttl_ = 0;
 
         /**
          * <code>uint32 ttl = 5;</code>
@@ -46324,10 +45544,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getSrcIpAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcIpAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
             }
-            if (!getDstIpAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstIpAddress_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
             }
             if (dscp_ != 0) {
@@ -46339,7 +45559,7 @@ public final class ContextOuterClass {
             if (ttl_ != 0) {
                 output.writeUInt32(5, ttl_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -46348,10 +45568,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getSrcIpAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcIpAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
             }
-            if (!getDstIpAddressBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstIpAddress_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
             }
             if (dscp_ != 0) {
@@ -46363,7 +45583,7 @@ public final class ContextOuterClass {
             if (ttl_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(5, ttl_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -46387,7 +45607,7 @@ public final class ContextOuterClass {
                 return false;
             if (getTtl() != other.getTtl())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -46409,7 +45629,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getProtocol();
             hash = (37 * hash) + TTL_FIELD_NUMBER;
             hash = (53 * hash) + getTtl();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -46503,22 +45723,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionSettings_L3.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();
+                bitField0_ = 0;
                 srcIpAddress_ = "";
                 dstIpAddress_ = "";
                 dscp_ = 0;
@@ -46549,43 +45763,30 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
                 context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
-                result.srcIpAddress_ = srcIpAddress_;
-                result.dstIpAddress_ = dstIpAddress_;
-                result.dscp_ = dscp_;
-                result.protocol_ = protocol_;
-                result.ttl_ = ttl_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionSettings_L3 result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.srcIpAddress_ = srcIpAddress_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.dstIpAddress_ = dstIpAddress_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.dscp_ = dscp_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.protocol_ = protocol_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.ttl_ = ttl_;
+                }
             }
 
             @java.lang.Override
@@ -46603,10 +45804,12 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getSrcIpAddress().isEmpty()) {
                     srcIpAddress_ = other.srcIpAddress_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
                 if (!other.getDstIpAddress().isEmpty()) {
                     dstIpAddress_ = other.dstIpAddress_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (other.getDscp() != 0) {
@@ -46618,7 +45821,7 @@ public final class ContextOuterClass {
                 if (other.getTtl() != 0) {
                     setTtl(other.getTtl());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -46630,20 +45833,75 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    srcIpAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    dstIpAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    dscp_ = input.readUInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    protocol_ = input.readUInt32();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 40:
+                                {
+                                    ttl_ = input.readUInt32();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object srcIpAddress_ = "";
 
             /**
@@ -46687,6 +45945,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 srcIpAddress_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -46697,6 +45956,7 @@ public final class ContextOuterClass {
              */
             public Builder clearSrcIpAddress() {
                 srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -46712,6 +45972,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 srcIpAddress_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -46759,6 +46020,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 dstIpAddress_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -46769,6 +46031,7 @@ public final class ContextOuterClass {
              */
             public Builder clearDstIpAddress() {
                 dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -46784,6 +46047,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 dstIpAddress_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -46806,6 +46070,7 @@ public final class ContextOuterClass {
              */
             public Builder setDscp(int value) {
                 dscp_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -46815,6 +46080,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearDscp() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 dscp_ = 0;
                 onChanged();
                 return this;
@@ -46838,6 +46104,7 @@ public final class ContextOuterClass {
              */
             public Builder setProtocol(int value) {
                 protocol_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -46847,6 +46114,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearProtocol() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 protocol_ = 0;
                 onChanged();
                 return this;
@@ -46870,6 +46138,7 @@ public final class ContextOuterClass {
              */
             public Builder setTtl(int value) {
                 ttl_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -46879,6 +46148,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearTtl() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 ttl_ = 0;
                 onChanged();
                 return this;
@@ -46911,7 +46181,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionSettings_L3 parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionSettings_L3(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -46980,64 +46260,6 @@ public final class ContextOuterClass {
             return new ConnectionSettings_L4();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionSettings_L4(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:
-                            {
-                                srcPort_ = input.readUInt32();
-                                break;
-                            }
-                        case 16:
-                            {
-                                dstPort_ = input.readUInt32();
-                                break;
-                            }
-                        case 24:
-                            {
-                                tcpFlags_ = input.readUInt32();
-                                break;
-                            }
-                        case 32:
-                            {
-                                ttl_ = 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_ConnectionSettings_L4_descriptor;
         }
@@ -47049,7 +46271,7 @@ public final class ContextOuterClass {
 
         public static final int SRC_PORT_FIELD_NUMBER = 1;
 
-        private int srcPort_;
+        private int srcPort_ = 0;
 
         /**
          * <code>uint32 src_port = 1;</code>
@@ -47062,7 +46284,7 @@ public final class ContextOuterClass {
 
         public static final int DST_PORT_FIELD_NUMBER = 2;
 
-        private int dstPort_;
+        private int dstPort_ = 0;
 
         /**
          * <code>uint32 dst_port = 2;</code>
@@ -47075,7 +46297,7 @@ public final class ContextOuterClass {
 
         public static final int TCP_FLAGS_FIELD_NUMBER = 3;
 
-        private int tcpFlags_;
+        private int tcpFlags_ = 0;
 
         /**
          * <code>uint32 tcp_flags = 3;</code>
@@ -47088,7 +46310,7 @@ public final class ContextOuterClass {
 
         public static final int TTL_FIELD_NUMBER = 4;
 
-        private int ttl_;
+        private int ttl_ = 0;
 
         /**
          * <code>uint32 ttl = 4;</code>
@@ -47126,7 +46348,7 @@ public final class ContextOuterClass {
             if (ttl_ != 0) {
                 output.writeUInt32(4, ttl_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -47147,7 +46369,7 @@ public final class ContextOuterClass {
             if (ttl_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(4, ttl_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -47169,7 +46391,7 @@ public final class ContextOuterClass {
                 return false;
             if (getTtl() != other.getTtl())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -47189,7 +46411,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getTcpFlags();
             hash = (37 * hash) + TTL_FIELD_NUMBER;
             hash = (53 * hash) + getTtl();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -47283,22 +46505,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionSettings_L4.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();
+                bitField0_ = 0;
                 srcPort_ = 0;
                 dstPort_ = 0;
                 tcpFlags_ = 0;
@@ -47328,42 +46544,27 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
                 context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
-                result.srcPort_ = srcPort_;
-                result.dstPort_ = dstPort_;
-                result.tcpFlags_ = tcpFlags_;
-                result.ttl_ = ttl_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionSettings_L4 result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.srcPort_ = srcPort_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.dstPort_ = dstPort_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.tcpFlags_ = tcpFlags_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.ttl_ = ttl_;
+                }
             }
 
             @java.lang.Override
@@ -47391,7 +46592,7 @@ public final class ContextOuterClass {
                 if (other.getTtl() != 0) {
                     setTtl(other.getTtl());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -47403,20 +46604,68 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    srcPort_ = input.readUInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 16:
+                                {
+                                    dstPort_ = input.readUInt32();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 24:
+                                {
+                                    tcpFlags_ = input.readUInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    ttl_ = input.readUInt32();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int srcPort_;
 
             /**
@@ -47435,6 +46684,7 @@ public final class ContextOuterClass {
              */
             public Builder setSrcPort(int value) {
                 srcPort_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -47444,6 +46694,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearSrcPort() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 srcPort_ = 0;
                 onChanged();
                 return this;
@@ -47467,6 +46718,7 @@ public final class ContextOuterClass {
              */
             public Builder setDstPort(int value) {
                 dstPort_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -47476,6 +46728,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearDstPort() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 dstPort_ = 0;
                 onChanged();
                 return this;
@@ -47499,6 +46752,7 @@ public final class ContextOuterClass {
              */
             public Builder setTcpFlags(int value) {
                 tcpFlags_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -47508,6 +46762,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearTcpFlags() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 tcpFlags_ = 0;
                 onChanged();
                 return this;
@@ -47531,6 +46786,7 @@ public final class ContextOuterClass {
              */
             public Builder setTtl(int value) {
                 ttl_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -47540,6 +46796,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearTtl() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 ttl_ = 0;
                 onChanged();
                 return this;
@@ -47572,7 +46829,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionSettings_L4 parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionSettings_L4(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -47685,96 +46952,6 @@ public final class ContextOuterClass {
             return new ConnectionSettings();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionSettings(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.ConnectionSettings_L0.Builder subBuilder = null;
-                                if (l0_ != null) {
-                                    subBuilder = l0_.toBuilder();
-                                }
-                                l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(l0_);
-                                    l0_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
-                                if (l2_ != null) {
-                                    subBuilder = l2_.toBuilder();
-                                }
-                                l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(l2_);
-                                    l2_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 26:
-                            {
-                                context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
-                                if (l3_ != null) {
-                                    subBuilder = l3_.toBuilder();
-                                }
-                                l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(l3_);
-                                    l3_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 34:
-                            {
-                                context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
-                                if (l4_ != null) {
-                                    subBuilder = l4_.toBuilder();
-                                }
-                                l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(l4_);
-                                    l4_ = 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_ConnectionSettings_descriptor;
         }
@@ -47811,7 +46988,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-            return getL0();
+            return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         }
 
         public static final int L2_FIELD_NUMBER = 2;
@@ -47841,7 +47018,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-            return getL2();
+            return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         }
 
         public static final int L3_FIELD_NUMBER = 3;
@@ -47871,7 +47048,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-            return getL3();
+            return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
 
         public static final int L4_FIELD_NUMBER = 4;
@@ -47901,7 +47078,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-            return getL4();
+            return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -47931,7 +47108,7 @@ public final class ContextOuterClass {
             if (l4_ != null) {
                 output.writeMessage(4, getL4());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -47952,7 +47129,7 @@ public final class ContextOuterClass {
             if (l4_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getL4());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -47990,7 +47167,7 @@ public final class ContextOuterClass {
                 if (!getL4().equals(other.getL4()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -48018,7 +47195,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + L4_FIELD_NUMBER;
                 hash = (53 * hash) + getL4().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -48112,44 +47289,34 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionSettings.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 (l0Builder_ == null) {
-                    l0_ = null;
-                } else {
-                    l0_ = null;
+                bitField0_ = 0;
+                l0_ = null;
+                if (l0Builder_ != null) {
+                    l0Builder_.dispose();
                     l0Builder_ = null;
                 }
-                if (l2Builder_ == null) {
-                    l2_ = null;
-                } else {
-                    l2_ = null;
+                l2_ = null;
+                if (l2Builder_ != null) {
+                    l2Builder_.dispose();
                     l2Builder_ = null;
                 }
-                if (l3Builder_ == null) {
-                    l3_ = null;
-                } else {
-                    l3_ = null;
+                l3_ = null;
+                if (l3Builder_ != null) {
+                    l3Builder_.dispose();
                     l3Builder_ = null;
                 }
-                if (l4Builder_ == null) {
-                    l4_ = null;
-                } else {
-                    l4_ = null;
+                l4_ = null;
+                if (l4Builder_ != null) {
+                    l4Builder_.dispose();
                     l4Builder_ = null;
                 }
                 return this;
@@ -48177,58 +47344,27 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionSettings buildPartial() {
                 context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
-                if (l0Builder_ == null) {
-                    result.l0_ = l0_;
-                } else {
-                    result.l0_ = l0Builder_.build();
-                }
-                if (l2Builder_ == null) {
-                    result.l2_ = l2_;
-                } else {
-                    result.l2_ = l2Builder_.build();
-                }
-                if (l3Builder_ == null) {
-                    result.l3_ = l3_;
-                } else {
-                    result.l3_ = l3Builder_.build();
-                }
-                if (l4Builder_ == null) {
-                    result.l4_ = l4_;
-                } else {
-                    result.l4_ = l4Builder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionSettings result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.l0_ = l0Builder_ == null ? l0_ : l0Builder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.l2_ = l2Builder_ == null ? l2_ : l2Builder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.l3_ = l3Builder_ == null ? l3_ : l3Builder_.build();
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.l4_ = l4Builder_ == null ? l4_ : l4Builder_.build();
+                }
             }
 
             @java.lang.Override
@@ -48256,7 +47392,7 @@ public final class ContextOuterClass {
                 if (other.hasL4()) {
                     mergeL4(other.getL4());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -48268,20 +47404,68 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionSettings parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getL0FieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getL2FieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getL3FieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    input.readMessage(getL4FieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.ConnectionSettings_L0 l0_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
@@ -48291,7 +47475,7 @@ public final class ContextOuterClass {
              * @return Whether the l0 field is set.
              */
             public boolean hasL0() {
-                return l0Builder_ != null || l0_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -48315,10 +47499,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     l0_ = value;
-                    onChanged();
                 } else {
                     l0Builder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -48328,10 +47513,11 @@ public final class ContextOuterClass {
             public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
                 if (l0Builder_ == null) {
                     l0_ = builderForValue.build();
-                    onChanged();
                 } else {
                     l0Builder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -48340,15 +47526,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
                 if (l0Builder_ == null) {
-                    if (l0_ != null) {
-                        l0_ = context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && l0_ != null && l0_ != context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) {
+                        getL0Builder().mergeFrom(value);
                     } else {
                         l0_ = value;
                     }
-                    onChanged();
                 } else {
                     l0Builder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -48356,13 +47543,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
              */
             public Builder clearL0() {
-                if (l0Builder_ == null) {
-                    l0_ = null;
-                    onChanged();
-                } else {
-                    l0_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                l0_ = null;
+                if (l0Builder_ != null) {
+                    l0Builder_.dispose();
                     l0Builder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -48370,6 +47557,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
              */
             public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getL0FieldBuilder().getBuilder();
             }
@@ -48405,7 +47593,7 @@ public final class ContextOuterClass {
              * @return Whether the l2 field is set.
              */
             public boolean hasL2() {
-                return l2Builder_ != null || l2_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -48429,10 +47617,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     l2_ = value;
-                    onChanged();
                 } else {
                     l2Builder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -48442,10 +47631,11 @@ public final class ContextOuterClass {
             public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
                 if (l2Builder_ == null) {
                     l2_ = builderForValue.build();
-                    onChanged();
                 } else {
                     l2Builder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -48454,15 +47644,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
                 if (l2Builder_ == null) {
-                    if (l2_ != null) {
-                        l2_ = context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && l2_ != null && l2_ != context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) {
+                        getL2Builder().mergeFrom(value);
                     } else {
                         l2_ = value;
                     }
-                    onChanged();
                 } else {
                     l2Builder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -48470,13 +47661,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
              */
             public Builder clearL2() {
-                if (l2Builder_ == null) {
-                    l2_ = null;
-                    onChanged();
-                } else {
-                    l2_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                l2_ = null;
+                if (l2Builder_ != null) {
+                    l2Builder_.dispose();
                     l2Builder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -48484,6 +47675,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
              */
             public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getL2FieldBuilder().getBuilder();
             }
@@ -48519,7 +47711,7 @@ public final class ContextOuterClass {
              * @return Whether the l3 field is set.
              */
             public boolean hasL3() {
-                return l3Builder_ != null || l3_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -48543,10 +47735,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     l3_ = value;
-                    onChanged();
                 } else {
                     l3Builder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -48556,10 +47749,11 @@ public final class ContextOuterClass {
             public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
                 if (l3Builder_ == null) {
                     l3_ = builderForValue.build();
-                    onChanged();
                 } else {
                     l3Builder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -48568,15 +47762,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
                 if (l3Builder_ == null) {
-                    if (l3_ != null) {
-                        l3_ = context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && l3_ != null && l3_ != context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) {
+                        getL3Builder().mergeFrom(value);
                     } else {
                         l3_ = value;
                     }
-                    onChanged();
                 } else {
                     l3Builder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -48584,13 +47779,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
              */
             public Builder clearL3() {
-                if (l3Builder_ == null) {
-                    l3_ = null;
-                    onChanged();
-                } else {
-                    l3_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                l3_ = null;
+                if (l3Builder_ != null) {
+                    l3Builder_.dispose();
                     l3Builder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -48598,6 +47793,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
              */
             public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getL3FieldBuilder().getBuilder();
             }
@@ -48633,7 +47829,7 @@ public final class ContextOuterClass {
              * @return Whether the l4 field is set.
              */
             public boolean hasL4() {
-                return l4Builder_ != null || l4_ != null;
+                return ((bitField0_ & 0x00000008) != 0);
             }
 
             /**
@@ -48657,10 +47853,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     l4_ = value;
-                    onChanged();
                 } else {
                     l4Builder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -48670,10 +47867,11 @@ public final class ContextOuterClass {
             public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
                 if (l4Builder_ == null) {
                     l4_ = builderForValue.build();
-                    onChanged();
                 } else {
                     l4Builder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -48682,15 +47880,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
                 if (l4Builder_ == null) {
-                    if (l4_ != null) {
-                        l4_ = context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000008) != 0) && l4_ != null && l4_ != context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) {
+                        getL4Builder().mergeFrom(value);
                     } else {
                         l4_ = value;
                     }
-                    onChanged();
                 } else {
                     l4Builder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -48698,13 +47897,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
              */
             public Builder clearL4() {
-                if (l4Builder_ == null) {
-                    l4_ = null;
-                    onChanged();
-                } else {
-                    l4_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                l4_ = null;
+                if (l4Builder_ != null) {
+                    l4Builder_.dispose();
                     l4Builder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -48712,6 +47911,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
              */
             public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return getL4FieldBuilder().getBuilder();
             }
@@ -48765,7 +47965,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionSettings parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionSettings(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -48913,108 +48123,6 @@ public final class ContextOuterClass {
             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 (serviceId_ != null) {
-                                    subBuilder = serviceId_.toBuilder();
-                                }
-                                serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(serviceId_);
-                                    serviceId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 26:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                pathHopsEndpointIds_.add(input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                                    subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                subServiceIds_.add(input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 42:
-                            {
-                                context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
-                                if (settings_ != null) {
-                                    subBuilder = settings_.toBuilder();
-                                }
-                                settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(settings_);
-                                    settings_ = 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)) {
-                    pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-                }
-                if (((mutable_bitField0_ & 0x00000002) != 0)) {
-                    subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_Connection_descriptor;
         }
@@ -49051,7 +48159,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-            return getConnectionId();
+            return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
 
         public static final int SERVICE_ID_FIELD_NUMBER = 2;
@@ -49081,11 +48189,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-            return getServiceId();
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
 
         /**
@@ -49130,6 +48239,7 @@ public final class ContextOuterClass {
 
         public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
 
         /**
@@ -49199,7 +48309,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-            return getSettings();
+            return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -49232,7 +48342,7 @@ public final class ContextOuterClass {
             if (settings_ != null) {
                 output.writeMessage(5, getSettings());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -49256,7 +48366,7 @@ public final class ContextOuterClass {
             if (settings_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getSettings());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -49292,7 +48402,7 @@ public final class ContextOuterClass {
                 if (!getSettings().equals(other.getSettings()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -49324,7 +48434,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
                 hash = (53 * hash) + getSettings().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -49418,52 +48528,43 @@ public final class ContextOuterClass {
 
             // 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) {
-                    getPathHopsEndpointIdsFieldBuilder();
-                    getSubServiceIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                } else {
-                    connectionId_ = null;
+                bitField0_ = 0;
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                } else {
-                    serviceId_ = null;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
                 if (pathHopsEndpointIdsBuilder_ == null) {
                     pathHopsEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    pathHopsEndpointIds_ = null;
                     pathHopsEndpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (subServiceIdsBuilder_ == null) {
                     subServiceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    subServiceIds_ = null;
                     subServiceIdsBuilder_.clear();
                 }
-                if (settingsBuilder_ == null) {
-                    settings_ = null;
-                } else {
-                    settings_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                settings_ = null;
+                if (settingsBuilder_ != null) {
+                    settingsBuilder_.dispose();
                     settingsBuilder_ = null;
                 }
                 return this;
@@ -49491,72 +48592,46 @@ public final class ContextOuterClass {
             @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 (serviceIdBuilder_ == null) {
-                    result.serviceId_ = serviceId_;
-                } else {
-                    result.serviceId_ = serviceIdBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Connection result) {
                 if (pathHopsEndpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
                 } else {
                     result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
                 }
                 if (subServiceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     result.subServiceIds_ = subServiceIds_;
                 } else {
                     result.subServiceIds_ = subServiceIdsBuilder_.build();
                 }
-                if (settingsBuilder_ == null) {
-                    result.settings_ = settings_;
-                } else {
-                    result.settings_ = settingsBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.Connection result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.connectionId_ = connectionIdBuilder_ == null ? connectionId_ : connectionIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.settings_ = settingsBuilder_ == null ? settings_ : settingsBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -49582,7 +48657,7 @@ public final class ContextOuterClass {
                     if (!other.pathHopsEndpointIds_.isEmpty()) {
                         if (pathHopsEndpointIds_.isEmpty()) {
                             pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensurePathHopsEndpointIdsIsMutable();
                             pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
@@ -49595,7 +48670,7 @@ public final class ContextOuterClass {
                             pathHopsEndpointIdsBuilder_.dispose();
                             pathHopsEndpointIdsBuilder_ = null;
                             pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             pathHopsEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getPathHopsEndpointIdsFieldBuilder() : null;
                         } else {
                             pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
@@ -49606,7 +48681,7 @@ public final class ContextOuterClass {
                     if (!other.subServiceIds_.isEmpty()) {
                         if (subServiceIds_.isEmpty()) {
                             subServiceIds_ = other.subServiceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureSubServiceIdsIsMutable();
                             subServiceIds_.addAll(other.subServiceIds_);
@@ -49619,7 +48694,7 @@ public final class ContextOuterClass {
                             subServiceIdsBuilder_.dispose();
                             subServiceIdsBuilder_ = null;
                             subServiceIds_ = other.subServiceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             subServiceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSubServiceIdsFieldBuilder() : null;
                         } else {
                             subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
@@ -49629,7 +48704,7 @@ public final class ContextOuterClass {
                 if (other.hasSettings()) {
                     mergeSettings(other.getSettings());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -49641,17 +48716,80 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getConnectionIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (pathHopsEndpointIdsBuilder_ == null) {
+                                        ensurePathHopsEndpointIdsIsMutable();
+                                        pathHopsEndpointIds_.add(m);
+                                    } else {
+                                        pathHopsEndpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.ServiceId m = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+                                    if (subServiceIdsBuilder_ == null) {
+                                        ensureSubServiceIdsIsMutable();
+                                        subServiceIds_.add(m);
+                                    } else {
+                                        subServiceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getSettingsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -49666,7 +48804,7 @@ public final class ContextOuterClass {
              * @return Whether the connectionId field is set.
              */
             public boolean hasConnectionId() {
-                return connectionIdBuilder_ != null || connectionId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -49690,10 +48828,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     connectionId_ = value;
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -49703,10 +48842,11 @@ public final class ContextOuterClass {
             public Builder setConnectionId(context.ContextOuterClass.ConnectionId.Builder builderForValue) {
                 if (connectionIdBuilder_ == null) {
                     connectionId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -49715,15 +48855,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
                 if (connectionIdBuilder_ == null) {
-                    if (connectionId_ != null) {
-                        connectionId_ = context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && connectionId_ != null && connectionId_ != context.ContextOuterClass.ConnectionId.getDefaultInstance()) {
+                        getConnectionIdBuilder().mergeFrom(value);
                     } else {
                         connectionId_ = value;
                     }
-                    onChanged();
                 } else {
                     connectionIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -49731,13 +48872,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionId connection_id = 1;</code>
              */
             public Builder clearConnectionId() {
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                    onChanged();
-                } else {
-                    connectionId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -49745,6 +48886,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionId connection_id = 1;</code>
              */
             public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getConnectionIdFieldBuilder().getBuilder();
             }
@@ -49780,7 +48922,7 @@ public final class ContextOuterClass {
              * @return Whether the serviceId field is set.
              */
             public boolean hasServiceId() {
-                return serviceIdBuilder_ != null || serviceId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -49804,10 +48946,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     serviceId_ = value;
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -49817,10 +48960,11 @@ public final class ContextOuterClass {
             public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
                 if (serviceIdBuilder_ == null) {
                     serviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -49829,15 +48973,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
                 if (serviceIdBuilder_ == null) {
-                    if (serviceId_ != null) {
-                        serviceId_ = context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
                         serviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -49845,13 +48990,13 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 2;</code>
              */
             public Builder clearServiceId() {
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                    onChanged();
-                } else {
-                    serviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -49859,6 +49004,7 @@ public final class ContextOuterClass {
              * <code>.context.ServiceId service_id = 2;</code>
              */
             public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getServiceIdFieldBuilder().getBuilder();
             }
@@ -49888,9 +49034,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ = java.util.Collections.emptyList();
 
             private void ensurePathHopsEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -50042,7 +49188,7 @@ public final class ContextOuterClass {
             public Builder clearPathHopsEndpointIds() {
                 if (pathHopsEndpointIdsBuilder_ == null) {
                     pathHopsEndpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     pathHopsEndpointIdsBuilder_.clear();
@@ -50116,7 +49262,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> getPathHopsEndpointIdsFieldBuilder() {
                 if (pathHopsEndpointIdsBuilder_ == null) {
-                    pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(pathHopsEndpointIds_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(pathHopsEndpointIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     pathHopsEndpointIds_ = null;
                 }
                 return pathHopsEndpointIdsBuilder_;
@@ -50125,9 +49271,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ = java.util.Collections.emptyList();
 
             private void ensureSubServiceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -50279,7 +49425,7 @@ public final class ContextOuterClass {
             public Builder clearSubServiceIds() {
                 if (subServiceIdsBuilder_ == null) {
                     subServiceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     subServiceIdsBuilder_.clear();
@@ -50353,7 +49499,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> getSubServiceIdsFieldBuilder() {
                 if (subServiceIdsBuilder_ == null) {
-                    subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(subServiceIds_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(subServiceIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     subServiceIds_ = null;
                 }
                 return subServiceIdsBuilder_;
@@ -50368,7 +49514,7 @@ public final class ContextOuterClass {
              * @return Whether the settings field is set.
              */
             public boolean hasSettings() {
-                return settingsBuilder_ != null || settings_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -50392,10 +49538,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     settings_ = value;
-                    onChanged();
                 } else {
                     settingsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -50405,10 +49552,11 @@ public final class ContextOuterClass {
             public Builder setSettings(context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
                 if (settingsBuilder_ == null) {
                     settings_ = builderForValue.build();
-                    onChanged();
                 } else {
                     settingsBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -50417,15 +49565,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
                 if (settingsBuilder_ == null) {
-                    if (settings_ != null) {
-                        settings_ = context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && settings_ != null && settings_ != context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) {
+                        getSettingsBuilder().mergeFrom(value);
                     } else {
                         settings_ = value;
                     }
-                    onChanged();
                 } else {
                     settingsBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -50433,13 +49582,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings settings = 5;</code>
              */
             public Builder clearSettings() {
-                if (settingsBuilder_ == null) {
-                    settings_ = null;
-                    onChanged();
-                } else {
-                    settings_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                settings_ = null;
+                if (settingsBuilder_ != null) {
+                    settingsBuilder_.dispose();
                     settingsBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -50447,6 +49596,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionSettings settings = 5;</code>
              */
             public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getSettingsFieldBuilder().getBuilder();
             }
@@ -50500,7 +49650,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -50571,57 +49731,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -50633,6 +49742,7 @@ public final class ContextOuterClass {
 
         public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
 
         /**
@@ -50693,7 +49803,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < connectionIds_.size(); i++) {
                 output.writeMessage(1, connectionIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -50705,7 +49815,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < connectionIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, connectionIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -50721,7 +49831,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
             if (!getConnectionIdsList().equals(other.getConnectionIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -50737,7 +49847,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getConnectionIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -50831,29 +49941,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (connectionIdsBuilder_ == null) {
                     connectionIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    connectionIds_ = null;
                     connectionIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -50879,7 +49983,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionIdList buildPartial() {
                 context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ConnectionIdList result) {
                 if (connectionIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
@@ -50889,38 +50001,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -50960,7 +50044,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -50972,17 +50056,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.ConnectionId m = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+                                    if (connectionIdsBuilder_ == null) {
+                                        ensureConnectionIdsIsMutable();
+                                        connectionIds_.add(m);
+                                    } else {
+                                        connectionIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -51252,7 +50366,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -51323,57 +50447,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -51385,6 +50458,7 @@ public final class ContextOuterClass {
 
         public static final int CONNECTIONS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.Connection> connections_;
 
         /**
@@ -51445,7 +50519,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < connections_.size(); i++) {
                 output.writeMessage(1, connections_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -51457,7 +50531,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < connections_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, connections_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -51473,7 +50547,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
             if (!getConnectionsList().equals(other.getConnectionsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -51489,7 +50563,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
                 hash = (53 * hash) + getConnectionsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -51583,29 +50657,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 if (connectionsBuilder_ == null) {
                     connections_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    connections_ = null;
                     connectionsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -51631,7 +50699,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionList buildPartial() {
                 context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ConnectionList result) {
                 if (connectionsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         connections_ = java.util.Collections.unmodifiableList(connections_);
@@ -51641,38 +50717,10 @@ public final class ContextOuterClass {
                 } 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -51712,7 +50760,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -51724,17 +50772,47 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.Connection m = input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry);
+                                    if (connectionsBuilder_ == null) {
+                                        ensureConnectionsIsMutable();
+                                        connections_.add(m);
+                                    } else {
+                                        connectionsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -52004,7 +51082,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -52083,70 +51171,6 @@ public final class ContextOuterClass {
             return new ConnectionEvent();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConnectionEvent(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.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;
-                            }
-                        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_ConnectionEvent_descriptor;
         }
@@ -52183,7 +51207,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-            return getEvent();
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         public static final int CONNECTION_ID_FIELD_NUMBER = 2;
@@ -52213,7 +51237,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-            return getConnectionId();
+            return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -52237,7 +51261,7 @@ public final class ContextOuterClass {
             if (connectionId_ != null) {
                 output.writeMessage(2, getConnectionId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -52252,7 +51276,7 @@ public final class ContextOuterClass {
             if (connectionId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getConnectionId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -52278,7 +51302,7 @@ public final class ContextOuterClass {
                 if (!getConnectionId().equals(other.getConnectionId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -52298,7 +51322,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getConnectionId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -52392,32 +51416,24 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConnectionEvent.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;
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                } else {
-                    connectionId_ = null;
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
                 return this;
@@ -52445,48 +51461,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConnectionEvent buildPartial() {
                 context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-                if (eventBuilder_ == null) {
-                    result.event_ = event_;
-                } else {
-                    result.event_ = eventBuilder_.build();
-                }
-                if (connectionIdBuilder_ == null) {
-                    result.connectionId_ = connectionId_;
-                } else {
-                    result.connectionId_ = connectionIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConnectionEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.connectionId_ = connectionIdBuilder_ == null ? connectionId_ : connectionIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -52508,7 +51497,7 @@ public final class ContextOuterClass {
                 if (other.hasConnectionId()) {
                     mergeConnectionId(other.getConnectionId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -52520,20 +51509,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConnectionEvent parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getConnectionIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Event event_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
@@ -52543,7 +51566,7 @@ public final class ContextOuterClass {
              * @return Whether the event field is set.
              */
             public boolean hasEvent() {
-                return eventBuilder_ != null || event_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -52567,10 +51590,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     event_ = value;
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -52580,10 +51604,11 @@ public final class ContextOuterClass {
             public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
                 if (eventBuilder_ == null) {
                     event_ = builderForValue.build();
-                    onChanged();
                 } else {
                     eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -52592,15 +51617,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEvent(context.ContextOuterClass.Event value) {
                 if (eventBuilder_ == null) {
-                    if (event_ != null) {
-                        event_ = context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
                     } else {
                         event_ = value;
                     }
-                    onChanged();
                 } else {
                     eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -52608,13 +51634,13 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public Builder clearEvent() {
-                if (eventBuilder_ == null) {
-                    event_ = null;
-                    onChanged();
-                } else {
-                    event_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
                     eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -52622,6 +51648,7 @@ public final class ContextOuterClass {
              * <code>.context.Event event = 1;</code>
              */
             public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEventFieldBuilder().getBuilder();
             }
@@ -52657,7 +51684,7 @@ public final class ContextOuterClass {
              * @return Whether the connectionId field is set.
              */
             public boolean hasConnectionId() {
-                return connectionIdBuilder_ != null || connectionId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -52681,10 +51708,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     connectionId_ = value;
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -52694,10 +51722,11 @@ public final class ContextOuterClass {
             public Builder setConnectionId(context.ContextOuterClass.ConnectionId.Builder builderForValue) {
                 if (connectionIdBuilder_ == null) {
                     connectionId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -52706,15 +51735,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
                 if (connectionIdBuilder_ == null) {
-                    if (connectionId_ != null) {
-                        connectionId_ = context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && connectionId_ != null && connectionId_ != context.ContextOuterClass.ConnectionId.getDefaultInstance()) {
+                        getConnectionIdBuilder().mergeFrom(value);
                     } else {
                         connectionId_ = value;
                     }
-                    onChanged();
                 } else {
                     connectionIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -52722,13 +51752,13 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionId connection_id = 2;</code>
              */
             public Builder clearConnectionId() {
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                    onChanged();
-                } else {
-                    connectionId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -52736,6 +51766,7 @@ public final class ContextOuterClass {
              * <code>.context.ConnectionId connection_id = 2;</code>
              */
             public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getConnectionIdFieldBuilder().getBuilder();
             }
@@ -52789,7 +51820,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConnectionEvent parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConnectionEvent(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -52889,83 +51930,6 @@ public final class ContextOuterClass {
             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;
         }
@@ -53002,7 +51966,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-            return getTopologyId();
+            return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
 
         public static final int DEVICE_ID_FIELD_NUMBER = 2;
@@ -53032,7 +51996,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-            return getDeviceId();
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
         public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
@@ -53062,7 +52026,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-            return getEndpointUuid();
+            return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -53089,7 +52053,7 @@ public final class ContextOuterClass {
             if (endpointUuid_ != null) {
                 output.writeMessage(3, getEndpointUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -53107,7 +52071,7 @@ public final class ContextOuterClass {
             if (endpointUuid_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getEndpointUuid());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -53139,7 +52103,7 @@ public final class ContextOuterClass {
                 if (!getEndpointUuid().equals(other.getEndpointUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -53163,7 +52127,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
                 hash = (53 * hash) + getEndpointUuid().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -53261,38 +52225,29 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                } else {
-                    deviceId_ = null;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
-                if (endpointUuidBuilder_ == null) {
-                    endpointUuid_ = null;
-                } else {
-                    endpointUuid_ = null;
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
                     endpointUuidBuilder_ = null;
                 }
                 return this;
@@ -53320,53 +52275,24 @@ public final class ContextOuterClass {
             @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();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.EndPointId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.topologyId_ = topologyIdBuilder_ == null ? topologyId_ : topologyIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.endpointUuid_ = endpointUuidBuilder_ == null ? endpointUuid_ : endpointUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -53391,7 +52317,7 @@ public final class ContextOuterClass {
                 if (other.hasEndpointUuid()) {
                     mergeEndpointUuid(other.getEndpointUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -53403,20 +52329,61 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getTopologyIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getEndpointUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 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_;
@@ -53426,7 +52393,7 @@ public final class ContextOuterClass {
              * @return Whether the topologyId field is set.
              */
             public boolean hasTopologyId() {
-                return topologyIdBuilder_ != null || topologyId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -53450,10 +52417,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     topologyId_ = value;
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -53463,10 +52431,11 @@ public final class ContextOuterClass {
             public Builder setTopologyId(context.ContextOuterClass.TopologyId.Builder builderForValue) {
                 if (topologyIdBuilder_ == null) {
                     topologyId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     topologyIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -53475,15 +52444,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
                 if (topologyIdBuilder_ == null) {
-                    if (topologyId_ != null) {
-                        topologyId_ = context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && topologyId_ != null && topologyId_ != context.ContextOuterClass.TopologyId.getDefaultInstance()) {
+                        getTopologyIdBuilder().mergeFrom(value);
                     } else {
                         topologyId_ = value;
                     }
-                    onChanged();
                 } else {
                     topologyIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -53491,13 +52461,13 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public Builder clearTopologyId() {
-                if (topologyIdBuilder_ == null) {
-                    topologyId_ = null;
-                    onChanged();
-                } else {
-                    topologyId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                topologyId_ = null;
+                if (topologyIdBuilder_ != null) {
+                    topologyIdBuilder_.dispose();
                     topologyIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -53505,6 +52475,7 @@ public final class ContextOuterClass {
              * <code>.context.TopologyId topology_id = 1;</code>
              */
             public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getTopologyIdFieldBuilder().getBuilder();
             }
@@ -53540,7 +52511,7 @@ public final class ContextOuterClass {
              * @return Whether the deviceId field is set.
              */
             public boolean hasDeviceId() {
-                return deviceIdBuilder_ != null || deviceId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -53564,10 +52535,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     deviceId_ = value;
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -53577,10 +52549,11 @@ public final class ContextOuterClass {
             public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (deviceIdBuilder_ == null) {
                     deviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -53589,15 +52562,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
                 if (deviceIdBuilder_ == null) {
-                    if (deviceId_ != null) {
-                        deviceId_ = context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
                         deviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -53605,13 +52579,13 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 2;</code>
              */
             public Builder clearDeviceId() {
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                    onChanged();
-                } else {
-                    deviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -53619,6 +52593,7 @@ public final class ContextOuterClass {
              * <code>.context.DeviceId device_id = 2;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getDeviceIdFieldBuilder().getBuilder();
             }
@@ -53654,7 +52629,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointUuid field is set.
              */
             public boolean hasEndpointUuid() {
-                return endpointUuidBuilder_ != null || endpointUuid_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -53678,10 +52653,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointUuid_ = value;
-                    onChanged();
                 } else {
                     endpointUuidBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -53691,10 +52667,11 @@ public final class ContextOuterClass {
             public Builder setEndpointUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (endpointUuidBuilder_ == null) {
                     endpointUuid_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointUuidBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -53703,15 +52680,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
                 if (endpointUuidBuilder_ == null) {
-                    if (endpointUuid_ != null) {
-                        endpointUuid_ = context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && endpointUuid_ != null && endpointUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getEndpointUuidBuilder().mergeFrom(value);
                     } else {
                         endpointUuid_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointUuidBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -53719,13 +52697,13 @@ public final class ContextOuterClass {
              * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
             public Builder clearEndpointUuid() {
-                if (endpointUuidBuilder_ == null) {
-                    endpointUuid_ = null;
-                    onChanged();
-                } else {
-                    endpointUuid_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
                     endpointUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -53733,6 +52711,7 @@ public final class ContextOuterClass {
              * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getEndpointUuidFieldBuilder().getBuilder();
             }
@@ -53786,7 +52765,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -53924,111 +52913,6 @@ public final class ContextOuterClass {
             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();
-            }
-            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.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();
-                                name_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                endpointType_ = s;
-                                break;
-                            }
-                        case 32:
-                            {
-                                int rawValue = input.readEnum();
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                kpiSampleTypes_.add(rawValue);
-                                break;
-                            }
-                        case 34:
-                            {
-                                int length = input.readRawVarint32();
-                                int oldLimit = input.pushLimit(length);
-                                while (input.getBytesUntilLimit() > 0) {
-                                    int rawValue = input.readEnum();
-                                    if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                        kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                                        mutable_bitField0_ |= 0x00000001;
-                                    }
-                                    kpiSampleTypes_.add(rawValue);
-                                }
-                                input.popLimit(oldLimit);
-                                break;
-                            }
-                        case 42:
-                            {
-                                context.ContextOuterClass.Location.Builder subBuilder = null;
-                                if (endpointLocation_ != null) {
-                                    subBuilder = endpointLocation_.toBuilder();
-                                }
-                                endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(endpointLocation_);
-                                    endpointLocation_ = 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)) {
-                    kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
         }
@@ -54065,12 +52949,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 2;</code>
@@ -54107,7 +52992,8 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_TYPE_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object endpointType_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object endpointType_ = "";
 
         /**
          * <code>string endpoint_type = 3;</code>
@@ -54144,13 +53030,13 @@ public final class ContextOuterClass {
 
         public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<java.lang.Integer> kpiSampleTypes_;
 
         private static final com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ = new com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
 
             public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.forNumber(from);
                 return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
             }
         };
@@ -54231,7 +53117,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-            return getEndpointLocation();
+            return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -54253,10 +53139,10 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 output.writeMessage(1, getEndpointId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
             }
-            if (!getEndpointTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointType_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, endpointType_);
             }
             if (getKpiSampleTypesList().size() > 0) {
@@ -54269,7 +53155,7 @@ public final class ContextOuterClass {
             if (endpointLocation_ != null) {
                 output.writeMessage(5, getEndpointLocation());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -54281,10 +53167,10 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEndpointId());
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
             }
-            if (!getEndpointTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointType_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, endpointType_);
             }
             {
@@ -54302,7 +53188,7 @@ public final class ContextOuterClass {
             if (endpointLocation_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getEndpointLocation());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -54334,7 +53220,7 @@ public final class ContextOuterClass {
                 if (!getEndpointLocation().equals(other.getEndpointLocation()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -54362,7 +53248,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
                 hash = (53 * hash) + getEndpointLocation().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -54456,36 +53342,28 @@ public final class ContextOuterClass {
 
             // 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;
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
                 name_ = "";
                 endpointType_ = "";
                 kpiSampleTypes_ = java.util.Collections.emptyList();
-                bitField0_ = (bitField0_ & ~0x00000001);
-                if (endpointLocationBuilder_ == null) {
-                    endpointLocation_ = null;
-                } else {
-                    endpointLocation_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                endpointLocation_ = null;
+                if (endpointLocationBuilder_ != null) {
+                    endpointLocationBuilder_.dispose();
                     endpointLocationBuilder_ = null;
                 }
                 return this;
@@ -54513,56 +53391,36 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.EndPoint buildPartial() {
                 context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-                int from_bitField0_ = bitField0_;
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
-                }
-                result.name_ = name_;
-                result.endpointType_ = endpointType_;
-                if (((bitField0_ & 0x00000001) != 0)) {
-                    kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-                    bitField0_ = (bitField0_ & ~0x00000001);
-                }
-                result.kpiSampleTypes_ = kpiSampleTypes_;
-                if (endpointLocationBuilder_ == null) {
-                    result.endpointLocation_ = endpointLocation_;
-                } else {
-                    result.endpointLocation_ = endpointLocationBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartialRepeatedFields(context.ContextOuterClass.EndPoint result) {
+                if (((bitField0_ & 0x00000008) != 0)) {
+                    kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+                    bitField0_ = (bitField0_ & ~0x00000008);
+                }
+                result.kpiSampleTypes_ = kpiSampleTypes_;
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.EndPoint result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.endpointType_ = endpointType_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.endpointLocation_ = endpointLocationBuilder_ == null ? endpointLocation_ : endpointLocationBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -54583,16 +53441,18 @@ public final class ContextOuterClass {
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getEndpointType().isEmpty()) {
                     endpointType_ = other.endpointType_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (!other.kpiSampleTypes_.isEmpty()) {
                     if (kpiSampleTypes_.isEmpty()) {
                         kpiSampleTypes_ = other.kpiSampleTypes_;
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     } else {
                         ensureKpiSampleTypesIsMutable();
                         kpiSampleTypes_.addAll(other.kpiSampleTypes_);
@@ -54602,7 +53462,7 @@ public final class ContextOuterClass {
                 if (other.hasEndpointLocation()) {
                     mergeEndpointLocation(other.getEndpointLocation());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -54614,17 +53474,84 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    endpointType_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 32:
+                                {
+                                    int tmpRaw = input.readEnum();
+                                    ensureKpiSampleTypesIsMutable();
+                                    kpiSampleTypes_.add(tmpRaw);
+                                    break;
+                                }
+                            // case 32
+                            case 34:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int oldLimit = input.pushLimit(length);
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        int tmpRaw = input.readEnum();
+                                        ensureKpiSampleTypesIsMutable();
+                                        kpiSampleTypes_.add(tmpRaw);
+                                    }
+                                    input.popLimit(oldLimit);
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getEndpointLocationFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -54639,7 +53566,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -54663,10 +53590,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -54676,10 +53604,11 @@ public final class ContextOuterClass {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -54688,15 +53617,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -54704,13 +53634,13 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -54718,6 +53648,7 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -54787,6 +53718,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -54797,6 +53729,7 @@ public final class ContextOuterClass {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -54812,6 +53745,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -54859,6 +53793,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 endpointType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -54869,6 +53804,7 @@ public final class ContextOuterClass {
              */
             public Builder clearEndpointType() {
                 endpointType_ = getDefaultInstance().getEndpointType();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -54884,6 +53820,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 endpointType_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -54891,9 +53828,9 @@ public final class ContextOuterClass {
             private java.util.List<java.lang.Integer> kpiSampleTypes_ = java.util.Collections.emptyList();
 
             private void ensureKpiSampleTypesIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -54973,7 +53910,7 @@ public final class ContextOuterClass {
              */
             public Builder clearKpiSampleTypes() {
                 kpiSampleTypes_ = java.util.Collections.emptyList();
-                bitField0_ = (bitField0_ & ~0x00000001);
+                bitField0_ = (bitField0_ & ~0x00000008);
                 onChanged();
                 return this;
             }
@@ -54997,8 +53934,8 @@ public final class ContextOuterClass {
 
             /**
              * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
-             * @param index The index of the value to return.
-             * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+             * @param index The index to set the value at.
+             * @param value The enum numeric value on the wire for kpiSampleTypes to set.
              * @return This builder for chaining.
              */
             public Builder setKpiSampleTypesValue(int index, int value) {
@@ -55043,7 +53980,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointLocation field is set.
              */
             public boolean hasEndpointLocation() {
-                return endpointLocationBuilder_ != null || endpointLocation_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -55067,10 +54004,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointLocation_ = value;
-                    onChanged();
                 } else {
                     endpointLocationBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -55080,10 +54018,11 @@ public final class ContextOuterClass {
             public Builder setEndpointLocation(context.ContextOuterClass.Location.Builder builderForValue) {
                 if (endpointLocationBuilder_ == null) {
                     endpointLocation_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointLocationBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -55092,15 +54031,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
                 if (endpointLocationBuilder_ == null) {
-                    if (endpointLocation_ != null) {
-                        endpointLocation_ = context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && endpointLocation_ != null && endpointLocation_ != context.ContextOuterClass.Location.getDefaultInstance()) {
+                        getEndpointLocationBuilder().mergeFrom(value);
                     } else {
                         endpointLocation_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointLocationBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -55108,13 +54048,13 @@ public final class ContextOuterClass {
              * <code>.context.Location endpoint_location = 5;</code>
              */
             public Builder clearEndpointLocation() {
-                if (endpointLocationBuilder_ == null) {
-                    endpointLocation_ = null;
-                    onChanged();
-                } else {
-                    endpointLocation_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                endpointLocation_ = null;
+                if (endpointLocationBuilder_ != null) {
+                    endpointLocationBuilder_.dispose();
                     endpointLocationBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -55122,6 +54062,7 @@ public final class ContextOuterClass {
              * <code>.context.Location endpoint_location = 5;</code>
              */
             public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getEndpointLocationFieldBuilder().getBuilder();
             }
@@ -55175,7 +54116,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -55276,75 +54227,6 @@ public final class ContextOuterClass {
             return new EndPointName();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private EndPointName(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();
-                                deviceName_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                endpointName_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                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_EndPointName_descriptor;
         }
@@ -55381,12 +54263,13 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int DEVICE_NAME_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object deviceName_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object deviceName_ = "";
 
         /**
          * <code>string device_name = 2;</code>
@@ -55423,7 +54306,8 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_NAME_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object endpointName_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object endpointName_ = "";
 
         /**
          * <code>string endpoint_name = 3;</code>
@@ -55460,7 +54344,8 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_TYPE_FIELD_NUMBER = 4;
 
-        private volatile java.lang.Object endpointType_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object endpointType_ = "";
 
         /**
          * <code>string endpoint_type = 4;</code>
@@ -55513,16 +54398,16 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 output.writeMessage(1, getEndpointId());
             }
-            if (!getDeviceNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(deviceName_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceName_);
             }
-            if (!getEndpointNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointName_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, endpointName_);
             }
-            if (!getEndpointTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointType_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 4, endpointType_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -55534,16 +54419,16 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEndpointId());
             }
-            if (!getDeviceNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(deviceName_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceName_);
             }
-            if (!getEndpointNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointName_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, endpointName_);
             }
-            if (!getEndpointTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(endpointType_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, endpointType_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -55569,7 +54454,7 @@ public final class ContextOuterClass {
                 return false;
             if (!getEndpointType().equals(other.getEndpointType()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -55591,7 +54476,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getEndpointName().hashCode();
             hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
             hash = (53 * hash) + getEndpointType().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -55685,26 +54570,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.EndPointName.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;
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
                 deviceName_ = "";
@@ -55735,46 +54613,27 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.EndPointName buildPartial() {
                 context.ContextOuterClass.EndPointName result = new context.ContextOuterClass.EndPointName(this);
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.deviceName_ = deviceName_;
-                result.endpointName_ = endpointName_;
-                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);
+            private void buildPartial0(context.ContextOuterClass.EndPointName result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.deviceName_ = deviceName_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.endpointName_ = endpointName_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.endpointType_ = endpointType_;
+                }
             }
 
             @java.lang.Override
@@ -55795,17 +54654,20 @@ public final class ContextOuterClass {
                 }
                 if (!other.getDeviceName().isEmpty()) {
                     deviceName_ = other.deviceName_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getEndpointName().isEmpty()) {
                     endpointName_ = other.endpointName_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (!other.getEndpointType().isEmpty()) {
                     endpointType_ = other.endpointType_;
+                    bitField0_ |= 0x00000008;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -55817,20 +54679,68 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.EndPointName parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    deviceName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    endpointName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    endpointType_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.EndPointName) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.EndPointId endpointId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
@@ -55840,7 +54750,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -55864,10 +54774,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -55877,10 +54788,11 @@ public final class ContextOuterClass {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -55889,15 +54801,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -55905,13 +54818,13 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -55919,6 +54832,7 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -55988,6 +54902,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 deviceName_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -55998,6 +54913,7 @@ public final class ContextOuterClass {
              */
             public Builder clearDeviceName() {
                 deviceName_ = getDefaultInstance().getDeviceName();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -56013,6 +54929,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 deviceName_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -56060,6 +54977,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 endpointName_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -56070,6 +54988,7 @@ public final class ContextOuterClass {
              */
             public Builder clearEndpointName() {
                 endpointName_ = getDefaultInstance().getEndpointName();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -56085,6 +55004,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 endpointName_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -56132,6 +55052,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 endpointType_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -56142,6 +55063,7 @@ public final class ContextOuterClass {
              */
             public Builder clearEndpointType() {
                 endpointType_ = getDefaultInstance().getEndpointType();
+                bitField0_ = (bitField0_ & ~0x00000008);
                 onChanged();
                 return this;
             }
@@ -56157,6 +55079,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 endpointType_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -56188,7 +55111,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public EndPointName parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new EndPointName(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -56259,57 +55192,6 @@ public final class ContextOuterClass {
             return new EndPointIdList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private EndPointIdList(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)) {
-                                    endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                endpointIds_.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)) {
-                    endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_EndPointIdList_descriptor;
         }
@@ -56321,6 +55203,7 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_;
 
         /**
@@ -56381,7 +55264,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < endpointIds_.size(); i++) {
                 output.writeMessage(1, endpointIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -56393,7 +55276,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < endpointIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, endpointIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -56409,7 +55292,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.EndPointIdList other = (context.ContextOuterClass.EndPointIdList) obj;
             if (!getEndpointIdsList().equals(other.getEndpointIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -56425,7 +55308,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ENDPOINT_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getEndpointIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -56519,29 +55402,23 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.EndPointIdList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getEndpointIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (endpointIdsBuilder_ == null) {
                     endpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    endpointIds_ = null;
                     endpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -56567,7 +55444,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.EndPointIdList buildPartial() {
                 context.ContextOuterClass.EndPointIdList result = new context.ContextOuterClass.EndPointIdList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.EndPointIdList result) {
                 if (endpointIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
@@ -56577,38 +55462,10 @@ public final class ContextOuterClass {
                 } else {
                     result.endpointIds_ = endpointIdsBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.EndPointIdList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -56648,7 +55505,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -56660,17 +55517,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.EndPointIdList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (endpointIdsBuilder_ == null) {
+                                        ensureEndpointIdsIsMutable();
+                                        endpointIds_.add(m);
+                                    } else {
+                                        endpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.EndPointIdList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -56940,7 +55827,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public EndPointIdList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new EndPointIdList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -57011,57 +55908,6 @@ public final class ContextOuterClass {
             return new EndPointNameList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private EndPointNameList(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)) {
-                                    endpointNames_ = new java.util.ArrayList<context.ContextOuterClass.EndPointName>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                endpointNames_.add(input.readMessage(context.ContextOuterClass.EndPointName.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)) {
-                    endpointNames_ = java.util.Collections.unmodifiableList(endpointNames_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_EndPointNameList_descriptor;
         }
@@ -57073,6 +55919,7 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_NAMES_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointName> endpointNames_;
 
         /**
@@ -57133,7 +55980,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < endpointNames_.size(); i++) {
                 output.writeMessage(1, endpointNames_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -57145,7 +55992,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < endpointNames_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, endpointNames_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -57161,7 +56008,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.EndPointNameList other = (context.ContextOuterClass.EndPointNameList) obj;
             if (!getEndpointNamesList().equals(other.getEndpointNamesList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -57177,7 +56024,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ENDPOINT_NAMES_FIELD_NUMBER;
                 hash = (53 * hash) + getEndpointNamesList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -57271,29 +56118,23 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.EndPointNameList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getEndpointNamesFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (endpointNamesBuilder_ == null) {
                     endpointNames_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    endpointNames_ = null;
                     endpointNamesBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -57319,7 +56160,15 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.EndPointNameList buildPartial() {
                 context.ContextOuterClass.EndPointNameList result = new context.ContextOuterClass.EndPointNameList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.EndPointNameList result) {
                 if (endpointNamesBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         endpointNames_ = java.util.Collections.unmodifiableList(endpointNames_);
@@ -57329,38 +56178,10 @@ public final class ContextOuterClass {
                 } else {
                     result.endpointNames_ = endpointNamesBuilder_.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);
+            private void buildPartial0(context.ContextOuterClass.EndPointNameList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -57400,7 +56221,7 @@ public final class ContextOuterClass {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -57412,17 +56233,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.EndPointNameList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.EndPointName m = input.readMessage(context.ContextOuterClass.EndPointName.parser(), extensionRegistry);
+                                    if (endpointNamesBuilder_ == null) {
+                                        ensureEndpointNamesIsMutable();
+                                        endpointNames_.add(m);
+                                    } else {
+                                        endpointNamesBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.EndPointNameList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -57692,7 +56543,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public EndPointNameList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new EndPointNameList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -57763,56 +56624,6 @@ public final class ContextOuterClass {
             return new ConfigRule_Custom();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConfigRule_Custom(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();
-                                resourceKey_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                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_Custom_descriptor;
         }
@@ -57824,7 +56635,8 @@ public final class ContextOuterClass {
 
         public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object resourceKey_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object resourceKey_ = "";
 
         /**
          * <code>string resource_key = 1;</code>
@@ -57861,7 +56673,8 @@ public final class ContextOuterClass {
 
         public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object resourceValue_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object resourceValue_ = "";
 
         /**
          * <code>string resource_value = 2;</code>
@@ -57911,13 +56724,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getResourceKeyBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceKey_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
             }
-            if (!getResourceValueBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceValue_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -57926,13 +56739,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getResourceKeyBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceKey_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
             }
-            if (!getResourceValueBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceValue_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -57950,7 +56763,7 @@ public final class ContextOuterClass {
                 return false;
             if (!getResourceValue().equals(other.getResourceValue()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -57966,7 +56779,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getResourceKey().hashCode();
             hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
             hash = (53 * hash) + getResourceValue().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -58060,22 +56873,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConfigRule_Custom.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();
+                bitField0_ = 0;
                 resourceKey_ = "";
                 resourceValue_ = "";
                 return this;
@@ -58103,40 +56910,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
                 context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
-                result.resourceKey_ = resourceKey_;
-                result.resourceValue_ = resourceValue_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConfigRule_Custom result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.resourceKey_ = resourceKey_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.resourceValue_ = resourceValue_;
+                }
             }
 
             @java.lang.Override
@@ -58154,13 +56942,15 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getResourceKey().isEmpty()) {
                     resourceKey_ = other.resourceKey_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
                 if (!other.getResourceValue().isEmpty()) {
                     resourceValue_ = other.resourceValue_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -58172,20 +56962,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    resourceKey_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    resourceValue_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object resourceKey_ = "";
 
             /**
@@ -58229,6 +57053,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 resourceKey_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -58239,6 +57064,7 @@ public final class ContextOuterClass {
              */
             public Builder clearResourceKey() {
                 resourceKey_ = getDefaultInstance().getResourceKey();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -58254,6 +57080,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 resourceKey_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -58301,6 +57128,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 resourceValue_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -58311,6 +57139,7 @@ public final class ContextOuterClass {
              */
             public Builder clearResourceValue() {
                 resourceValue_ = getDefaultInstance().getResourceValue();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -58326,6 +57155,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 resourceValue_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -58357,7 +57187,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConfigRule_Custom parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConfigRule_Custom(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -58436,70 +57276,6 @@ public final class ContextOuterClass {
             return new ConfigRule_ACL();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private ConfigRule_ACL(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:
-                            {
-                                acl.Acl.AclRuleSet.Builder subBuilder = null;
-                                if (ruleSet_ != null) {
-                                    subBuilder = ruleSet_.toBuilder();
-                                }
-                                ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(ruleSet_);
-                                    ruleSet_ = 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_ConfigRule_ACL_descriptor;
         }
@@ -58536,7 +57312,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int RULE_SET_FIELD_NUMBER = 2;
@@ -58566,7 +57342,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-            return getRuleSet();
+            return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -58590,7 +57366,7 @@ public final class ContextOuterClass {
             if (ruleSet_ != null) {
                 output.writeMessage(2, getRuleSet());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -58605,7 +57381,7 @@ public final class ContextOuterClass {
             if (ruleSet_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getRuleSet());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -58631,7 +57407,7 @@ public final class ContextOuterClass {
                 if (!getRuleSet().equals(other.getRuleSet()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -58651,7 +57427,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
                 hash = (53 * hash) + getRuleSet().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -58745,32 +57521,24 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.ConfigRule_ACL.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;
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
-                if (ruleSetBuilder_ == null) {
-                    ruleSet_ = null;
-                } else {
-                    ruleSet_ = null;
+                ruleSet_ = null;
+                if (ruleSetBuilder_ != null) {
+                    ruleSetBuilder_.dispose();
                     ruleSetBuilder_ = null;
                 }
                 return this;
@@ -58798,48 +57566,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
                 context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
-                }
-                if (ruleSetBuilder_ == null) {
-                    result.ruleSet_ = ruleSet_;
-                } else {
-                    result.ruleSet_ = ruleSetBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConfigRule_ACL result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.ruleSet_ = ruleSetBuilder_ == null ? ruleSet_ : ruleSetBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -58861,7 +57602,7 @@ public final class ContextOuterClass {
                 if (other.hasRuleSet()) {
                     mergeRuleSet(other.getRuleSet());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -58873,20 +57614,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getRuleSetFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.EndPointId endpointId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
@@ -58896,7 +57671,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -58920,10 +57695,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -58933,10 +57709,11 @@ public final class ContextOuterClass {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -58945,15 +57722,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -58961,13 +57739,13 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -58975,6 +57753,7 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -59010,7 +57789,7 @@ public final class ContextOuterClass {
              * @return Whether the ruleSet field is set.
              */
             public boolean hasRuleSet() {
-                return ruleSetBuilder_ != null || ruleSet_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -59034,10 +57813,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     ruleSet_ = value;
-                    onChanged();
                 } else {
                     ruleSetBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -59047,10 +57827,11 @@ public final class ContextOuterClass {
             public Builder setRuleSet(acl.Acl.AclRuleSet.Builder builderForValue) {
                 if (ruleSetBuilder_ == null) {
                     ruleSet_ = builderForValue.build();
-                    onChanged();
                 } else {
                     ruleSetBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -59059,15 +57840,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
                 if (ruleSetBuilder_ == null) {
-                    if (ruleSet_ != null) {
-                        ruleSet_ = acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && ruleSet_ != null && ruleSet_ != acl.Acl.AclRuleSet.getDefaultInstance()) {
+                        getRuleSetBuilder().mergeFrom(value);
                     } else {
                         ruleSet_ = value;
                     }
-                    onChanged();
                 } else {
                     ruleSetBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -59075,13 +57857,13 @@ public final class ContextOuterClass {
              * <code>.acl.AclRuleSet rule_set = 2;</code>
              */
             public Builder clearRuleSet() {
-                if (ruleSetBuilder_ == null) {
-                    ruleSet_ = null;
-                    onChanged();
-                } else {
-                    ruleSet_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                ruleSet_ = null;
+                if (ruleSetBuilder_ != null) {
+                    ruleSetBuilder_.dispose();
                     ruleSetBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -59089,6 +57871,7 @@ public final class ContextOuterClass {
              * <code>.acl.AclRuleSet rule_set = 2;</code>
              */
             public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getRuleSetFieldBuilder().getBuilder();
             }
@@ -59142,7 +57925,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public ConfigRule_ACL parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new ConfigRule_ACL(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -59210,7 +58003,7 @@ public final class ContextOuterClass {
          */
         context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
 
-        public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
+        context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
     }
 
     /**
@@ -59236,78 +58029,6 @@ public final class ContextOuterClass {
             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:
-                            {
-                                context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
-                                if (configRuleCase_ == 2) {
-                                    subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
-                                }
-                                configRule_ = input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
-                                    configRule_ = subBuilder.buildPartial();
-                                }
-                                configRuleCase_ = 2;
-                                break;
-                            }
-                        case 26:
-                            {
-                                context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
-                                if (configRuleCase_ == 3) {
-                                    subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
-                                }
-                                configRule_ = input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
-                                    configRule_ = subBuilder.buildPartial();
-                                }
-                                configRuleCase_ = 3;
-                                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;
         }
@@ -59319,6 +58040,7 @@ public final class ContextOuterClass {
 
         private int configRuleCase_ = 0;
 
+        @SuppressWarnings("serial")
         private java.lang.Object configRule_;
 
         public enum ConfigRuleCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
@@ -59365,7 +58087,7 @@ public final class ContextOuterClass {
 
         public static final int ACTION_FIELD_NUMBER = 1;
 
-        private int action_;
+        private int action_ = 0;
 
         /**
          * <code>.context.ConfigActionEnum action = 1;</code>
@@ -59382,8 +58104,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConfigActionEnum getAction() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+            context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.forNumber(action_);
             return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
         }
 
@@ -59479,7 +58200,7 @@ public final class ContextOuterClass {
             if (configRuleCase_ == 3) {
                 output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -59497,7 +58218,7 @@ public final class ContextOuterClass {
             if (configRuleCase_ == 3) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -59527,7 +58248,7 @@ public final class ContextOuterClass {
                 case 0:
                 default:
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -59553,7 +58274,7 @@ public final class ContextOuterClass {
                 case 0:
                 default:
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -59647,23 +58368,23 @@ public final class ContextOuterClass {
 
             // 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();
+                bitField0_ = 0;
                 action_ = 0;
+                if (customBuilder_ != null) {
+                    customBuilder_.clear();
+                }
+                if (aclBuilder_ != null) {
+                    aclBuilder_.clear();
+                }
                 configRuleCase_ = 0;
                 configRule_ = null;
                 return this;
@@ -59691,54 +58412,30 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.ConfigRule buildPartial() {
                 context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-                result.action_ = action_;
-                if (configRuleCase_ == 2) {
-                    if (customBuilder_ == null) {
-                        result.configRule_ = configRule_;
-                    } else {
-                        result.configRule_ = customBuilder_.build();
-                    }
-                }
-                if (configRuleCase_ == 3) {
-                    if (aclBuilder_ == null) {
-                        result.configRule_ = configRule_;
-                    } else {
-                        result.configRule_ = aclBuilder_.build();
-                    }
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.configRuleCase_ = configRuleCase_;
+                buildPartialOneofs(result);
                 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);
+            private void buildPartial0(context.ContextOuterClass.ConfigRule result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.action_ = action_;
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartialOneofs(context.ContextOuterClass.ConfigRule result) {
+                result.configRuleCase_ = configRuleCase_;
+                result.configRule_ = this.configRule_;
+                if (configRuleCase_ == 2 && customBuilder_ != null) {
+                    result.configRule_ = customBuilder_.build();
+                }
+                if (configRuleCase_ == 3 && aclBuilder_ != null) {
+                    result.configRule_ = aclBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -59773,7 +58470,7 @@ public final class ContextOuterClass {
                             break;
                         }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -59785,17 +58482,56 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    action_ = input.readEnum();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 18:
+                                {
+                                    input.readMessage(getCustomFieldBuilder().getBuilder(), extensionRegistry);
+                                    configRuleCase_ = 2;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getAclFieldBuilder().getBuilder(), extensionRegistry);
+                                    configRuleCase_ = 3;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -59814,6 +58550,8 @@ public final class ContextOuterClass {
                 return this;
             }
 
+            private int bitField0_;
+
             private int action_ = 0;
 
             /**
@@ -59832,6 +58570,7 @@ public final class ContextOuterClass {
              */
             public Builder setActionValue(int value) {
                 action_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -59842,8 +58581,7 @@ public final class ContextOuterClass {
              */
             @java.lang.Override
             public context.ContextOuterClass.ConfigActionEnum getAction() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+                context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.forNumber(action_);
                 return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
             }
 
@@ -59856,6 +58594,7 @@ public final class ContextOuterClass {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000001;
                 action_ = value.getNumber();
                 onChanged();
                 return this;
@@ -59866,6 +58605,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearAction() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 action_ = 0;
                 onChanged();
                 return this;
@@ -59946,8 +58686,9 @@ public final class ContextOuterClass {
                 } else {
                     if (configRuleCase_ == 2) {
                         customBuilder_.mergeFrom(value);
+                    } else {
+                        customBuilder_.setMessage(value);
                     }
-                    customBuilder_.setMessage(value);
                 }
                 configRuleCase_ = 2;
                 return this;
@@ -60008,7 +58749,6 @@ public final class ContextOuterClass {
                 }
                 configRuleCase_ = 2;
                 onChanged();
-                ;
                 return customBuilder_;
             }
 
@@ -60087,8 +58827,9 @@ public final class ContextOuterClass {
                 } else {
                     if (configRuleCase_ == 3) {
                         aclBuilder_.mergeFrom(value);
+                    } else {
+                        aclBuilder_.setMessage(value);
                     }
-                    aclBuilder_.setMessage(value);
                 }
                 configRuleCase_ = 3;
                 return this;
@@ -60149,7 +58890,6 @@ public final class ContextOuterClass {
                 }
                 configRuleCase_ = 3;
                 onChanged();
-                ;
                 return aclBuilder_;
             }
 
@@ -60180,7 +58920,17 @@ public final class ContextOuterClass {
 
             @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);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -60251,56 +59001,6 @@ public final class ContextOuterClass {
             return new Constraint_Custom();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_Custom(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_Custom_descriptor;
         }
@@ -60312,7 +59012,8 @@ public final class ContextOuterClass {
 
         public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object constraintType_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object constraintType_ = "";
 
         /**
          * <code>string constraint_type = 1;</code>
@@ -60349,7 +59050,8 @@ public final class ContextOuterClass {
 
         public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object constraintValue_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object constraintValue_ = "";
 
         /**
          * <code>string constraint_value = 2;</code>
@@ -60399,13 +59101,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getConstraintTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintType_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
             }
-            if (!getConstraintValueBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintValue_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -60414,13 +59116,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getConstraintTypeBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintType_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
             }
-            if (!getConstraintValueBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintValue_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -60438,7 +59140,7 @@ public final class ContextOuterClass {
                 return false;
             if (!getConstraintValue().equals(other.getConstraintValue()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -60454,7 +59156,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getConstraintType().hashCode();
             hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
             hash = (53 * hash) + getConstraintValue().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -60548,22 +59250,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_Custom.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();
+                bitField0_ = 0;
                 constraintType_ = "";
                 constraintValue_ = "";
                 return this;
@@ -60591,40 +59287,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_Custom buildPartial() {
                 context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
-                result.constraintType_ = constraintType_;
-                result.constraintValue_ = constraintValue_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_Custom result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.constraintType_ = constraintType_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.constraintValue_ = constraintValue_;
+                }
             }
 
             @java.lang.Override
@@ -60642,13 +59319,15 @@ public final class ContextOuterClass {
                     return this;
                 if (!other.getConstraintType().isEmpty()) {
                     constraintType_ = other.constraintType_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
                 if (!other.getConstraintValue().isEmpty()) {
                     constraintValue_ = other.constraintValue_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -60660,20 +59339,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    constraintType_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    constraintValue_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private java.lang.Object constraintType_ = "";
 
             /**
@@ -60717,6 +59430,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 constraintType_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -60727,6 +59441,7 @@ public final class ContextOuterClass {
              */
             public Builder clearConstraintType() {
                 constraintType_ = getDefaultInstance().getConstraintType();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
@@ -60742,6 +59457,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 constraintType_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -60789,6 +59505,7 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 constraintValue_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -60799,6 +59516,7 @@ public final class ContextOuterClass {
              */
             public Builder clearConstraintValue() {
                 constraintValue_ = getDefaultInstance().getConstraintValue();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -60814,6 +59532,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 constraintValue_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -60845,7 +59564,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_Custom parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_Custom(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -60868,10 +59597,10 @@ public final class ContextOuterClass {
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>float start_timestamp = 1;</code>
+         * <code>double start_timestamp = 1;</code>
          * @return The startTimestamp.
          */
-        float getStartTimestamp();
+        double getStartTimestamp();
 
         /**
          * <code>float duration_days = 2;</code>
@@ -60902,54 +59631,6 @@ public final class ContextOuterClass {
             return new Constraint_Schedule();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_Schedule(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 13:
-                            {
-                                startTimestamp_ = input.readFloat();
-                                break;
-                            }
-                        case 21:
-                            {
-                                durationDays_ = input.readFloat();
-                                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_Schedule_descriptor;
         }
@@ -60961,20 +59642,20 @@ public final class ContextOuterClass {
 
         public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
 
-        private float startTimestamp_;
+        private double startTimestamp_ = 0D;
 
         /**
-         * <code>float start_timestamp = 1;</code>
+         * <code>double start_timestamp = 1;</code>
          * @return The startTimestamp.
          */
         @java.lang.Override
-        public float getStartTimestamp() {
+        public double getStartTimestamp() {
             return startTimestamp_;
         }
 
         public static final int DURATION_DAYS_FIELD_NUMBER = 2;
 
-        private float durationDays_;
+        private float durationDays_ = 0F;
 
         /**
          * <code>float duration_days = 2;</code>
@@ -61000,13 +59681,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (startTimestamp_ != 0F) {
-                output.writeFloat(1, startTimestamp_);
+            if (java.lang.Double.doubleToRawLongBits(startTimestamp_) != 0) {
+                output.writeDouble(1, startTimestamp_);
             }
-            if (durationDays_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(durationDays_) != 0) {
                 output.writeFloat(2, durationDays_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -61015,13 +59696,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (startTimestamp_ != 0F) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, startTimestamp_);
+            if (java.lang.Double.doubleToRawLongBits(startTimestamp_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeDoubleSize(1, startTimestamp_);
             }
-            if (durationDays_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(durationDays_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, durationDays_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -61035,11 +59716,11 @@ public final class ContextOuterClass {
                 return super.equals(obj);
             }
             context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
-            if (java.lang.Float.floatToIntBits(getStartTimestamp()) != java.lang.Float.floatToIntBits(other.getStartTimestamp()))
+            if (java.lang.Double.doubleToLongBits(getStartTimestamp()) != java.lang.Double.doubleToLongBits(other.getStartTimestamp()))
                 return false;
             if (java.lang.Float.floatToIntBits(getDurationDays()) != java.lang.Float.floatToIntBits(other.getDurationDays()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -61052,10 +59733,10 @@ public final class ContextOuterClass {
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getStartTimestamp());
+            hash = (53 * hash) + com.google.protobuf.Internal.hashLong(java.lang.Double.doubleToLongBits(getStartTimestamp()));
             hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getDurationDays());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -61149,23 +59830,17 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_Schedule.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();
-                startTimestamp_ = 0F;
+                bitField0_ = 0;
+                startTimestamp_ = 0D;
                 durationDays_ = 0F;
                 return this;
             }
@@ -61192,40 +59867,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_Schedule buildPartial() {
                 context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
-                result.startTimestamp_ = startTimestamp_;
-                result.durationDays_ = durationDays_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_Schedule result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.startTimestamp_ = startTimestamp_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.durationDays_ = durationDays_;
+                }
             }
 
             @java.lang.Override
@@ -61241,13 +59897,13 @@ public final class ContextOuterClass {
             public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
                 if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance())
                     return this;
-                if (other.getStartTimestamp() != 0F) {
+                if (other.getStartTimestamp() != 0D) {
                     setStartTimestamp(other.getStartTimestamp());
                 }
                 if (other.getDurationDays() != 0F) {
                     setDurationDays(other.getDurationDays());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -61259,48 +59915,84 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 9:
+                                {
+                                    startTimestamp_ = input.readDouble();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 9
+                            case 21:
+                                {
+                                    durationDays_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
-            private float startTimestamp_;
+            private int bitField0_;
+
+            private double startTimestamp_;
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @return The startTimestamp.
              */
             @java.lang.Override
-            public float getStartTimestamp() {
+            public double getStartTimestamp() {
                 return startTimestamp_;
             }
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @param value The startTimestamp to set.
              * @return This builder for chaining.
              */
-            public Builder setStartTimestamp(float value) {
+            public Builder setStartTimestamp(double value) {
                 startTimestamp_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>float start_timestamp = 1;</code>
+             * <code>double start_timestamp = 1;</code>
              * @return This builder for chaining.
              */
             public Builder clearStartTimestamp() {
-                startTimestamp_ = 0F;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                startTimestamp_ = 0D;
                 onChanged();
                 return this;
             }
@@ -61323,6 +60015,7 @@ public final class ContextOuterClass {
              */
             public Builder setDurationDays(float value) {
                 durationDays_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -61332,6 +60025,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearDurationDays() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 durationDays_ = 0F;
                 onChanged();
                 return this;
@@ -61364,7 +60058,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_Schedule parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_Schedule(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -61421,54 +60125,6 @@ public final class ContextOuterClass {
             return new GPS_Position();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private GPS_Position(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 13:
-                            {
-                                latitude_ = input.readFloat();
-                                break;
-                            }
-                        case 21:
-                            {
-                                longitude_ = input.readFloat();
-                                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_GPS_Position_descriptor;
         }
@@ -61480,7 +60136,7 @@ public final class ContextOuterClass {
 
         public static final int LATITUDE_FIELD_NUMBER = 1;
 
-        private float latitude_;
+        private float latitude_ = 0F;
 
         /**
          * <code>float latitude = 1;</code>
@@ -61493,7 +60149,7 @@ public final class ContextOuterClass {
 
         public static final int LONGITUDE_FIELD_NUMBER = 2;
 
-        private float longitude_;
+        private float longitude_ = 0F;
 
         /**
          * <code>float longitude = 2;</code>
@@ -61519,13 +60175,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (latitude_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(latitude_) != 0) {
                 output.writeFloat(1, latitude_);
             }
-            if (longitude_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(longitude_) != 0) {
                 output.writeFloat(2, longitude_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -61534,13 +60190,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (latitude_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(latitude_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, latitude_);
             }
-            if (longitude_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(longitude_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, longitude_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -61558,7 +60214,7 @@ public final class ContextOuterClass {
                 return false;
             if (java.lang.Float.floatToIntBits(getLongitude()) != java.lang.Float.floatToIntBits(other.getLongitude()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -61574,7 +60230,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getLatitude());
             hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getLongitude());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -61668,22 +60324,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.GPS_Position.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();
+                bitField0_ = 0;
                 latitude_ = 0F;
                 longitude_ = 0F;
                 return this;
@@ -61711,40 +60361,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.GPS_Position buildPartial() {
                 context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
-                result.latitude_ = latitude_;
-                result.longitude_ = longitude_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.GPS_Position result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.latitude_ = latitude_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.longitude_ = longitude_;
+                }
             }
 
             @java.lang.Override
@@ -61766,7 +60397,7 @@ public final class ContextOuterClass {
                 if (other.getLongitude() != 0F) {
                     setLongitude(other.getLongitude());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -61778,20 +60409,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.GPS_Position parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    latitude_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            case 21:
+                                {
+                                    longitude_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private float latitude_;
 
             /**
@@ -61810,6 +60475,7 @@ public final class ContextOuterClass {
              */
             public Builder setLatitude(float value) {
                 latitude_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -61819,6 +60485,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearLatitude() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 latitude_ = 0F;
                 onChanged();
                 return this;
@@ -61842,6 +60509,7 @@ public final class ContextOuterClass {
              */
             public Builder setLongitude(float value) {
                 longitude_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -61851,6 +60519,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearLongitude() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 longitude_ = 0F;
                 onChanged();
                 return this;
@@ -61883,7 +60552,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public GPS_Position parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new GPS_Position(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -61940,7 +60619,43 @@ public final class ContextOuterClass {
          */
         context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
 
-        public context.ContextOuterClass.Location.LocationCase getLocationCase();
+        /**
+         * <code>string interface = 3;</code>
+         * @return Whether the interface field is set.
+         */
+        boolean hasInterface();
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The interface.
+         */
+        java.lang.String getInterface();
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The bytes for interface.
+         */
+        com.google.protobuf.ByteString getInterfaceBytes();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return Whether the circuitPack field is set.
+         */
+        boolean hasCircuitPack();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The circuitPack.
+         */
+        java.lang.String getCircuitPack();
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The bytes for circuitPack.
+         */
+        com.google.protobuf.ByteString getCircuitPackBytes();
+
+        context.ContextOuterClass.Location.LocationCase getLocationCase();
     }
 
     /**
@@ -61965,65 +60680,6 @@ public final class ContextOuterClass {
             return new Location();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Location(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();
-                                locationCase_ = 1;
-                                location_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
-                                if (locationCase_ == 2) {
-                                    subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
-                                }
-                                location_ = input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
-                                    location_ = subBuilder.buildPartial();
-                                }
-                                locationCase_ = 2;
-                                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_Location_descriptor;
         }
@@ -62035,11 +60691,12 @@ public final class ContextOuterClass {
 
         private int locationCase_ = 0;
 
+        @SuppressWarnings("serial")
         private java.lang.Object location_;
 
         public enum LocationCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
 
-            REGION(1), GPS_POSITION(2), LOCATION_NOT_SET(0);
+            REGION(1), GPS_POSITION(2), INTERFACE(3), CIRCUIT_PACK(4), LOCATION_NOT_SET(0);
 
             private final int value;
 
@@ -62063,6 +60720,10 @@ public final class ContextOuterClass {
                         return REGION;
                     case 2:
                         return GPS_POSITION;
+                    case 3:
+                        return INTERFACE;
+                    case 4:
+                        return CIRCUIT_PACK;
                     case 0:
                         return LOCATION_NOT_SET;
                     default:
@@ -62164,6 +60825,108 @@ public final class ContextOuterClass {
             return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
 
+        public static final int INTERFACE_FIELD_NUMBER = 3;
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return Whether the interface field is set.
+         */
+        public boolean hasInterface() {
+            return locationCase_ == 3;
+        }
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The interface.
+         */
+        public java.lang.String getInterface() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 3) {
+                ref = location_;
+            }
+            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();
+                if (locationCase_ == 3) {
+                    location_ = s;
+                }
+                return s;
+            }
+        }
+
+        /**
+         * <code>string interface = 3;</code>
+         * @return The bytes for interface.
+         */
+        public com.google.protobuf.ByteString getInterfaceBytes() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 3) {
+                ref = location_;
+            }
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                if (locationCase_ == 3) {
+                    location_ = b;
+                }
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int CIRCUIT_PACK_FIELD_NUMBER = 4;
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return Whether the circuitPack field is set.
+         */
+        public boolean hasCircuitPack() {
+            return locationCase_ == 4;
+        }
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The circuitPack.
+         */
+        public java.lang.String getCircuitPack() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 4) {
+                ref = location_;
+            }
+            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();
+                if (locationCase_ == 4) {
+                    location_ = s;
+                }
+                return s;
+            }
+        }
+
+        /**
+         * <code>string circuit_pack = 4;</code>
+         * @return The bytes for circuitPack.
+         */
+        public com.google.protobuf.ByteString getCircuitPackBytes() {
+            java.lang.Object ref = "";
+            if (locationCase_ == 4) {
+                ref = location_;
+            }
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                if (locationCase_ == 4) {
+                    location_ = b;
+                }
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -62185,7 +60948,13 @@ public final class ContextOuterClass {
             if (locationCase_ == 2) {
                 output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
             }
-            unknownFields.writeTo(output);
+            if (locationCase_ == 3) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, location_);
+            }
+            if (locationCase_ == 4) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, location_);
+            }
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -62200,7 +60969,13 @@ public final class ContextOuterClass {
             if (locationCase_ == 2) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
             }
-            size += unknownFields.getSerializedSize();
+            if (locationCase_ == 3) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, location_);
+            }
+            if (locationCase_ == 4) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, location_);
+            }
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -62225,10 +61000,18 @@ public final class ContextOuterClass {
                     if (!getGpsPosition().equals(other.getGpsPosition()))
                         return false;
                     break;
+                case 3:
+                    if (!getInterface().equals(other.getInterface()))
+                        return false;
+                    break;
+                case 4:
+                    if (!getCircuitPack().equals(other.getCircuitPack()))
+                        return false;
+                    break;
                 case 0:
                 default:
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -62249,10 +61032,18 @@ public final class ContextOuterClass {
                     hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
                     hash = (53 * hash) + getGpsPosition().hashCode();
                     break;
+                case 3:
+                    hash = (37 * hash) + INTERFACE_FIELD_NUMBER;
+                    hash = (53 * hash) + getInterface().hashCode();
+                    break;
+                case 4:
+                    hash = (37 * hash) + CIRCUIT_PACK_FIELD_NUMBER;
+                    hash = (53 * hash) + getCircuitPack().hashCode();
+                    break;
                 case 0:
                 default:
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -62346,22 +61137,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Location.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();
+                bitField0_ = 0;
+                if (gpsPositionBuilder_ != null) {
+                    gpsPositionBuilder_.clear();
+                }
                 locationCase_ = 0;
                 location_ = null;
                 return this;
@@ -62389,49 +61177,24 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Location buildPartial() {
                 context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
-                if (locationCase_ == 1) {
-                    result.location_ = location_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                if (locationCase_ == 2) {
-                    if (gpsPositionBuilder_ == null) {
-                        result.location_ = location_;
-                    } else {
-                        result.location_ = gpsPositionBuilder_.build();
-                    }
-                }
-                result.locationCase_ = locationCase_;
+                buildPartialOneofs(result);
                 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);
+            private void buildPartial0(context.ContextOuterClass.Location result) {
+                int from_bitField0_ = bitField0_;
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartialOneofs(context.ContextOuterClass.Location result) {
+                result.locationCase_ = locationCase_;
+                result.location_ = this.location_;
+                if (locationCase_ == 2 && gpsPositionBuilder_ != null) {
+                    result.location_ = gpsPositionBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -62460,12 +61223,26 @@ public final class ContextOuterClass {
                             mergeGpsPosition(other.getGpsPosition());
                             break;
                         }
+                    case INTERFACE:
+                        {
+                            locationCase_ = 3;
+                            location_ = other.location_;
+                            onChanged();
+                            break;
+                        }
+                    case CIRCUIT_PACK:
+                        {
+                            locationCase_ = 4;
+                            location_ = other.location_;
+                            onChanged();
+                            break;
+                        }
                     case LOCATION_NOT_SET:
                         {
                             break;
                         }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -62477,17 +61254,66 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Location parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    locationCase_ = 1;
+                                    location_ = s;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getGpsPositionFieldBuilder().getBuilder(), extensionRegistry);
+                                    locationCase_ = 2;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    locationCase_ = 3;
+                                    location_ = s;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    locationCase_ = 4;
+                                    location_ = s;
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -62506,6 +61332,8 @@ public final class ContextOuterClass {
                 return this;
             }
 
+            private int bitField0_;
+
             /**
              * <code>string region = 1;</code>
              * @return Whether the region field is set.
@@ -62677,8 +61505,9 @@ public final class ContextOuterClass {
                 } else {
                     if (locationCase_ == 2) {
                         gpsPositionBuilder_.mergeFrom(value);
+                    } else {
+                        gpsPositionBuilder_.setMessage(value);
                     }
-                    gpsPositionBuilder_.setMessage(value);
                 }
                 locationCase_ = 2;
                 return this;
@@ -62739,10 +61568,201 @@ public final class ContextOuterClass {
                 }
                 locationCase_ = 2;
                 onChanged();
-                ;
                 return gpsPositionBuilder_;
             }
 
+            /**
+             * <code>string interface = 3;</code>
+             * @return Whether the interface field is set.
+             */
+            @java.lang.Override
+            public boolean hasInterface() {
+                return locationCase_ == 3;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return The interface.
+             */
+            @java.lang.Override
+            public java.lang.String getInterface() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 3) {
+                    ref = location_;
+                }
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    if (locationCase_ == 3) {
+                        location_ = s;
+                    }
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return The bytes for interface.
+             */
+            @java.lang.Override
+            public com.google.protobuf.ByteString getInterfaceBytes() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 3) {
+                    ref = location_;
+                }
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    if (locationCase_ == 3) {
+                        location_ = b;
+                    }
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @param value The interface to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInterface(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                locationCase_ = 3;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearInterface() {
+                if (locationCase_ == 3) {
+                    locationCase_ = 0;
+                    location_ = null;
+                    onChanged();
+                }
+                return this;
+            }
+
+            /**
+             * <code>string interface = 3;</code>
+             * @param value The bytes for interface to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInterfaceBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                locationCase_ = 3;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return Whether the circuitPack field is set.
+             */
+            @java.lang.Override
+            public boolean hasCircuitPack() {
+                return locationCase_ == 4;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return The circuitPack.
+             */
+            @java.lang.Override
+            public java.lang.String getCircuitPack() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 4) {
+                    ref = location_;
+                }
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    if (locationCase_ == 4) {
+                        location_ = s;
+                    }
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return The bytes for circuitPack.
+             */
+            @java.lang.Override
+            public com.google.protobuf.ByteString getCircuitPackBytes() {
+                java.lang.Object ref = "";
+                if (locationCase_ == 4) {
+                    ref = location_;
+                }
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    if (locationCase_ == 4) {
+                        location_ = b;
+                    }
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @param value The circuitPack to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCircuitPack(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                locationCase_ = 4;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearCircuitPack() {
+                if (locationCase_ == 4) {
+                    locationCase_ = 0;
+                    location_ = null;
+                    onChanged();
+                }
+                return this;
+            }
+
+            /**
+             * <code>string circuit_pack = 4;</code>
+             * @param value The bytes for circuitPack to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCircuitPackBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                locationCase_ = 4;
+                location_ = value;
+                onChanged();
+                return this;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -62770,7 +61790,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Location parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Location(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -62849,70 +61879,6 @@ public final class ContextOuterClass {
             return new Constraint_EndPointLocation();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_EndPointLocation(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:
-                            {
-                                context.ContextOuterClass.Location.Builder subBuilder = null;
-                                if (location_ != null) {
-                                    subBuilder = location_.toBuilder();
-                                }
-                                location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(location_);
-                                    location_ = 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_Constraint_EndPointLocation_descriptor;
         }
@@ -62949,7 +61915,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int LOCATION_FIELD_NUMBER = 2;
@@ -62979,7 +61945,7 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-            return getLocation();
+            return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -63003,7 +61969,7 @@ public final class ContextOuterClass {
             if (location_ != null) {
                 output.writeMessage(2, getLocation());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -63018,7 +61984,7 @@ public final class ContextOuterClass {
             if (location_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getLocation());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -63044,7 +62010,7 @@ public final class ContextOuterClass {
                 if (!getLocation().equals(other.getLocation()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -63064,7 +62030,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LOCATION_FIELD_NUMBER;
                 hash = (53 * hash) + getLocation().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -63158,32 +62124,24 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_EndPointLocation.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;
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
-                if (locationBuilder_ == null) {
-                    location_ = null;
-                } else {
-                    location_ = null;
+                location_ = null;
+                if (locationBuilder_ != null) {
+                    locationBuilder_.dispose();
                     locationBuilder_ = null;
                 }
                 return this;
@@ -63211,48 +62169,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
                 context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
-                }
-                if (locationBuilder_ == null) {
-                    result.location_ = location_;
-                } else {
-                    result.location_ = locationBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_EndPointLocation result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.location_ = locationBuilder_ == null ? location_ : locationBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -63274,7 +62205,7 @@ public final class ContextOuterClass {
                 if (other.hasLocation()) {
                     mergeLocation(other.getLocation());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -63286,20 +62217,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getLocationFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.EndPointId endpointId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
@@ -63309,7 +62274,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -63333,10 +62298,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -63346,10 +62312,11 @@ public final class ContextOuterClass {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -63358,15 +62325,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -63374,13 +62342,13 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -63388,6 +62356,7 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -63423,7 +62392,7 @@ public final class ContextOuterClass {
              * @return Whether the location field is set.
              */
             public boolean hasLocation() {
-                return locationBuilder_ != null || location_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -63447,10 +62416,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     location_ = value;
-                    onChanged();
                 } else {
                     locationBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -63460,10 +62430,11 @@ public final class ContextOuterClass {
             public Builder setLocation(context.ContextOuterClass.Location.Builder builderForValue) {
                 if (locationBuilder_ == null) {
                     location_ = builderForValue.build();
-                    onChanged();
                 } else {
                     locationBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -63472,15 +62443,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeLocation(context.ContextOuterClass.Location value) {
                 if (locationBuilder_ == null) {
-                    if (location_ != null) {
-                        location_ = context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && location_ != null && location_ != context.ContextOuterClass.Location.getDefaultInstance()) {
+                        getLocationBuilder().mergeFrom(value);
                     } else {
                         location_ = value;
                     }
-                    onChanged();
                 } else {
                     locationBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -63488,13 +62460,13 @@ public final class ContextOuterClass {
              * <code>.context.Location location = 2;</code>
              */
             public Builder clearLocation() {
-                if (locationBuilder_ == null) {
-                    location_ = null;
-                    onChanged();
-                } else {
-                    location_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                location_ = null;
+                if (locationBuilder_ != null) {
+                    locationBuilder_.dispose();
                     locationBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -63502,6 +62474,7 @@ public final class ContextOuterClass {
              * <code>.context.Location location = 2;</code>
              */
             public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getLocationFieldBuilder().getBuilder();
             }
@@ -63555,7 +62528,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_EndPointLocation parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_EndPointLocation(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -63623,62 +62606,6 @@ public final class ContextOuterClass {
             return new Constraint_EndPointPriority();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_EndPointPriority(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 16:
-                            {
-                                priority_ = 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_Constraint_EndPointPriority_descriptor;
         }
@@ -63715,12 +62642,12 @@ public final class ContextOuterClass {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int PRIORITY_FIELD_NUMBER = 2;
 
-        private int priority_;
+        private int priority_ = 0;
 
         /**
          * <code>uint32 priority = 2;</code>
@@ -63752,7 +62679,7 @@ public final class ContextOuterClass {
             if (priority_ != 0) {
                 output.writeUInt32(2, priority_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -63767,7 +62694,7 @@ public final class ContextOuterClass {
             if (priority_ != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, priority_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -63789,7 +62716,7 @@ public final class ContextOuterClass {
             }
             if (getPriority() != other.getPriority())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -63807,7 +62734,7 @@ public final class ContextOuterClass {
             }
             hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
             hash = (53 * hash) + getPriority();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -63901,26 +62828,19 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_EndPointPriority.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;
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
                 priority_ = 0;
@@ -63949,44 +62869,21 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_EndPointPriority buildPartial() {
                 context.ContextOuterClass.Constraint_EndPointPriority result = new context.ContextOuterClass.Constraint_EndPointPriority(this);
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.priority_ = priority_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_EndPointPriority result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.priority_ = priority_;
+                }
             }
 
             @java.lang.Override
@@ -64008,7 +62905,7 @@ public final class ContextOuterClass {
                 if (other.getPriority() != 0) {
                     setPriority(other.getPriority());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -64020,20 +62917,54 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_EndPointPriority parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    priority_ = input.readUInt32();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_EndPointPriority) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.EndPointId endpointId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
@@ -64043,7 +62974,7 @@ public final class ContextOuterClass {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -64067,10 +62998,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -64080,10 +63012,11 @@ public final class ContextOuterClass {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -64092,15 +63025,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -64108,13 +63042,13 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -64122,6 +63056,7 @@ public final class ContextOuterClass {
              * <code>.context.EndPointId endpoint_id = 1;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -64166,6 +63101,7 @@ public final class ContextOuterClass {
              */
             public Builder setPriority(int value) {
                 priority_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -64175,6 +63111,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearPriority() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 priority_ = 0;
                 onChanged();
                 return this;
@@ -64207,7 +63144,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_EndPointPriority parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_EndPointPriority(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -64258,49 +63205,6 @@ public final class ContextOuterClass {
             return new Constraint_SLA_Latency();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_SLA_Latency(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 13:
-                            {
-                                e2ELatencyMs_ = input.readFloat();
-                                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_SLA_Latency_descriptor;
         }
@@ -64312,7 +63216,7 @@ public final class ContextOuterClass {
 
         public static final int E2E_LATENCY_MS_FIELD_NUMBER = 1;
 
-        private float e2ELatencyMs_;
+        private float e2ELatencyMs_ = 0F;
 
         /**
          * <code>float e2e_latency_ms = 1;</code>
@@ -64338,10 +63242,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (e2ELatencyMs_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(e2ELatencyMs_) != 0) {
                 output.writeFloat(1, e2ELatencyMs_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -64350,10 +63254,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (e2ELatencyMs_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(e2ELatencyMs_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, e2ELatencyMs_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -64369,7 +63273,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.Constraint_SLA_Latency other = (context.ContextOuterClass.Constraint_SLA_Latency) obj;
             if (java.lang.Float.floatToIntBits(getE2ELatencyMs()) != java.lang.Float.floatToIntBits(other.getE2ELatencyMs()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -64383,7 +63287,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + E2E_LATENCY_MS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getE2ELatencyMs());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -64477,22 +63381,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_SLA_Latency.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();
+                bitField0_ = 0;
                 e2ELatencyMs_ = 0F;
                 return this;
             }
@@ -64519,39 +63417,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_SLA_Latency buildPartial() {
                 context.ContextOuterClass.Constraint_SLA_Latency result = new context.ContextOuterClass.Constraint_SLA_Latency(this);
-                result.e2ELatencyMs_ = e2ELatencyMs_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_SLA_Latency result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.e2ELatencyMs_ = e2ELatencyMs_;
+                }
             }
 
             @java.lang.Override
@@ -64570,7 +63447,7 @@ public final class ContextOuterClass {
                 if (other.getE2ELatencyMs() != 0F) {
                     setE2ELatencyMs(other.getE2ELatencyMs());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -64582,20 +63459,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_SLA_Latency parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    e2ELatencyMs_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_SLA_Latency) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private float e2ELatencyMs_;
 
             /**
@@ -64614,6 +63518,7 @@ public final class ContextOuterClass {
              */
             public Builder setE2ELatencyMs(float value) {
                 e2ELatencyMs_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -64623,6 +63528,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearE2ELatencyMs() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 e2ELatencyMs_ = 0F;
                 onChanged();
                 return this;
@@ -64655,7 +63561,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_SLA_Latency parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_SLA_Latency(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -64706,49 +63622,6 @@ public final class ContextOuterClass {
             return new Constraint_SLA_Capacity();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_SLA_Capacity(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 13:
-                            {
-                                capacityGbps_ = input.readFloat();
-                                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_SLA_Capacity_descriptor;
         }
@@ -64760,7 +63633,7 @@ public final class ContextOuterClass {
 
         public static final int CAPACITY_GBPS_FIELD_NUMBER = 1;
 
-        private float capacityGbps_;
+        private float capacityGbps_ = 0F;
 
         /**
          * <code>float capacity_gbps = 1;</code>
@@ -64786,10 +63659,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (capacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(capacityGbps_) != 0) {
                 output.writeFloat(1, capacityGbps_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -64798,10 +63671,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (capacityGbps_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(capacityGbps_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, capacityGbps_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -64817,7 +63690,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.Constraint_SLA_Capacity other = (context.ContextOuterClass.Constraint_SLA_Capacity) obj;
             if (java.lang.Float.floatToIntBits(getCapacityGbps()) != java.lang.Float.floatToIntBits(other.getCapacityGbps()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -64831,7 +63704,7 @@ public final class ContextOuterClass {
             hash = (19 * hash) + getDescriptor().hashCode();
             hash = (37 * hash) + CAPACITY_GBPS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getCapacityGbps());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -64925,22 +63798,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_SLA_Capacity.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();
+                bitField0_ = 0;
                 capacityGbps_ = 0F;
                 return this;
             }
@@ -64967,39 +63834,18 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_SLA_Capacity buildPartial() {
                 context.ContextOuterClass.Constraint_SLA_Capacity result = new context.ContextOuterClass.Constraint_SLA_Capacity(this);
-                result.capacityGbps_ = capacityGbps_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_SLA_Capacity result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.capacityGbps_ = capacityGbps_;
+                }
             }
 
             @java.lang.Override
@@ -65018,7 +63864,7 @@ public final class ContextOuterClass {
                 if (other.getCapacityGbps() != 0F) {
                     setCapacityGbps(other.getCapacityGbps());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -65030,20 +63876,47 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_SLA_Capacity parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    capacityGbps_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_SLA_Capacity) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private float capacityGbps_;
 
             /**
@@ -65062,6 +63935,7 @@ public final class ContextOuterClass {
              */
             public Builder setCapacityGbps(float value) {
                 capacityGbps_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -65071,6 +63945,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearCapacityGbps() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 capacityGbps_ = 0F;
                 onChanged();
                 return this;
@@ -65103,7 +63978,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_SLA_Capacity parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_SLA_Capacity(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -65170,59 +64055,6 @@ public final class ContextOuterClass {
             return new Constraint_SLA_Availability();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_SLA_Availability(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:
-                            {
-                                numDisjointPaths_ = input.readUInt32();
-                                break;
-                            }
-                        case 16:
-                            {
-                                allActive_ = input.readBool();
-                                break;
-                            }
-                        case 29:
-                            {
-                                availability_ = input.readFloat();
-                                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_SLA_Availability_descriptor;
         }
@@ -65234,7 +64066,7 @@ public final class ContextOuterClass {
 
         public static final int NUM_DISJOINT_PATHS_FIELD_NUMBER = 1;
 
-        private int numDisjointPaths_;
+        private int numDisjointPaths_ = 0;
 
         /**
          * <code>uint32 num_disjoint_paths = 1;</code>
@@ -65247,7 +64079,7 @@ public final class ContextOuterClass {
 
         public static final int ALL_ACTIVE_FIELD_NUMBER = 2;
 
-        private boolean allActive_;
+        private boolean allActive_ = false;
 
         /**
          * <code>bool all_active = 2;</code>
@@ -65260,7 +64092,7 @@ public final class ContextOuterClass {
 
         public static final int AVAILABILITY_FIELD_NUMBER = 3;
 
-        private float availability_;
+        private float availability_ = 0F;
 
         /**
          * <pre>
@@ -65296,10 +64128,10 @@ public final class ContextOuterClass {
             if (allActive_ != false) {
                 output.writeBool(2, allActive_);
             }
-            if (availability_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(availability_) != 0) {
                 output.writeFloat(3, availability_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -65314,10 +64146,10 @@ public final class ContextOuterClass {
             if (allActive_ != false) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, allActive_);
             }
-            if (availability_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(availability_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, availability_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -65337,7 +64169,7 @@ public final class ContextOuterClass {
                 return false;
             if (java.lang.Float.floatToIntBits(getAvailability()) != java.lang.Float.floatToIntBits(other.getAvailability()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -65355,7 +64187,7 @@ public final class ContextOuterClass {
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getAllActive());
             hash = (37 * hash) + AVAILABILITY_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getAvailability());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -65449,22 +64281,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_SLA_Availability.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();
+                bitField0_ = 0;
                 numDisjointPaths_ = 0;
                 allActive_ = false;
                 availability_ = 0F;
@@ -65493,41 +64319,24 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_SLA_Availability buildPartial() {
                 context.ContextOuterClass.Constraint_SLA_Availability result = new context.ContextOuterClass.Constraint_SLA_Availability(this);
-                result.numDisjointPaths_ = numDisjointPaths_;
-                result.allActive_ = allActive_;
-                result.availability_ = availability_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_SLA_Availability result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.numDisjointPaths_ = numDisjointPaths_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.allActive_ = allActive_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.availability_ = availability_;
+                }
             }
 
             @java.lang.Override
@@ -65552,7 +64361,7 @@ public final class ContextOuterClass {
                 if (other.getAvailability() != 0F) {
                     setAvailability(other.getAvailability());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -65564,20 +64373,61 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_SLA_Availability parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    numDisjointPaths_ = input.readUInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 16:
+                                {
+                                    allActive_ = input.readBool();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            case 29:
+                                {
+                                    availability_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_SLA_Availability) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private int numDisjointPaths_;
 
             /**
@@ -65596,6 +64446,7 @@ public final class ContextOuterClass {
              */
             public Builder setNumDisjointPaths(int value) {
                 numDisjointPaths_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -65605,6 +64456,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearNumDisjointPaths() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 numDisjointPaths_ = 0;
                 onChanged();
                 return this;
@@ -65628,6 +64480,7 @@ public final class ContextOuterClass {
              */
             public Builder setAllActive(boolean value) {
                 allActive_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -65637,6 +64490,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearAllActive() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 allActive_ = false;
                 onChanged();
                 return this;
@@ -65668,6 +64522,7 @@ public final class ContextOuterClass {
              */
             public Builder setAvailability(float value) {
                 availability_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -65681,6 +64536,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearAvailability() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 availability_ = 0F;
                 onChanged();
                 return this;
@@ -65713,7 +64569,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_SLA_Availability parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_SLA_Availability(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -65791,73 +64657,6 @@ public final class ContextOuterClass {
             return new Constraint_SLA_Isolation_level();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_SLA_Isolation_level(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 8:
-                            {
-                                int rawValue = input.readEnum();
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                isolationLevel_.add(rawValue);
-                                break;
-                            }
-                        case 10:
-                            {
-                                int length = input.readRawVarint32();
-                                int oldLimit = input.pushLimit(length);
-                                while (input.getBytesUntilLimit() > 0) {
-                                    int rawValue = input.readEnum();
-                                    if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                        isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
-                                        mutable_bitField0_ |= 0x00000001;
-                                    }
-                                    isolationLevel_.add(rawValue);
-                                }
-                                input.popLimit(oldLimit);
-                                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)) {
-                    isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
         }
@@ -65869,13 +64668,13 @@ public final class ContextOuterClass {
 
         public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<java.lang.Integer> isolationLevel_;
 
         private static final com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ = new com.google.protobuf.Internal.ListAdapter.Converter<java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
 
             public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.forNumber(from);
                 return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
             }
         };
@@ -65952,7 +64751,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < isolationLevel_.size(); i++) {
                 output.writeEnumNoTag(isolationLevel_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -65973,7 +64772,7 @@ public final class ContextOuterClass {
                 }
                 isolationLevelMemoizedSerializedSize = dataSize;
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -65989,7 +64788,7 @@ public final class ContextOuterClass {
             context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
             if (!isolationLevel_.equals(other.isolationLevel_))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -66005,7 +64804,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
                 hash = (53 * hash) + isolationLevel_.hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -66099,22 +64898,16 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_SLA_Isolation_level.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();
+                bitField0_ = 0;
                 isolationLevel_ = java.util.Collections.emptyList();
                 bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
@@ -66142,44 +64935,24 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
                 context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
-                int from_bitField0_ = bitField0_;
-                if (((bitField0_ & 0x00000001) != 0)) {
-                    isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.isolationLevel_ = isolationLevel_;
                 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);
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Constraint_SLA_Isolation_level result) {
+                if (((bitField0_ & 0x00000001) != 0)) {
+                    isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                }
+                result.isolationLevel_ = isolationLevel_;
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.Constraint_SLA_Isolation_level result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -66205,7 +64978,7 @@ public final class ContextOuterClass {
                     }
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -66217,17 +64990,56 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_SLA_Isolation_level parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    int tmpRaw = input.readEnum();
+                                    ensureIsolationLevelIsMutable();
+                                    isolationLevel_.add(tmpRaw);
+                                    break;
+                                }
+                            // case 8
+                            case 10:
+                                {
+                                    int length = input.readRawVarint32();
+                                    int oldLimit = input.pushLimit(length);
+                                    while (input.getBytesUntilLimit() > 0) {
+                                        int tmpRaw = input.readEnum();
+                                        ensureIsolationLevelIsMutable();
+                                        isolationLevel_.add(tmpRaw);
+                                    }
+                                    input.popLimit(oldLimit);
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_SLA_Isolation_level) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -66342,8 +65154,8 @@ public final class ContextOuterClass {
 
             /**
              * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-             * @param index The index of the value to return.
-             * @return The enum numeric value on the wire of isolationLevel at the given index.
+             * @param index The index to set the value at.
+             * @param value The enum numeric value on the wire for isolationLevel to set.
              * @return This builder for chaining.
              */
             public Builder setIsolationLevelValue(int index, int value) {
@@ -66406,7 +65218,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_SLA_Isolation_level parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_SLA_Isolation_level(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -66535,86 +65357,6 @@ public final class ContextOuterClass {
             return new Constraint_Exclusions();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Constraint_Exclusions(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 8:
-                            {
-                                isPermanent_ = input.readBool();
-                                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)) {
-                                    endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                endpointIds_.add(input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                                    linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                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)) {
-                    endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
-                }
-                if (((mutable_bitField0_ & 0x00000004) != 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_Constraint_Exclusions_descriptor;
         }
@@ -66626,7 +65368,7 @@ public final class ContextOuterClass {
 
         public static final int IS_PERMANENT_FIELD_NUMBER = 1;
 
-        private boolean isPermanent_;
+        private boolean isPermanent_ = false;
 
         /**
          * <code>bool is_permanent = 1;</code>
@@ -66639,6 +65381,7 @@ public final class ContextOuterClass {
 
         public static final int DEVICE_IDS_FIELD_NUMBER = 2;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
 
         /**
@@ -66683,6 +65426,7 @@ public final class ContextOuterClass {
 
         public static final int ENDPOINT_IDS_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_;
 
         /**
@@ -66727,6 +65471,7 @@ public final class ContextOuterClass {
 
         public static final int LINK_IDS_FIELD_NUMBER = 4;
 
+        @SuppressWarnings("serial")
         private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
 
         /**
@@ -66796,7 +65541,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 output.writeMessage(4, linkIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -66817,7 +65562,7 @@ public final class ContextOuterClass {
             for (int i = 0; i < linkIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -66839,7 +65584,7 @@ public final class ContextOuterClass {
                 return false;
             if (!getLinkIdsList().equals(other.getLinkIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -66865,7 +65610,7 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkIdsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -66959,44 +65704,38 @@ public final class ContextOuterClass {
 
             // Construct using context.ContextOuterClass.Constraint_Exclusions.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();
-                    getEndpointIdsFieldBuilder();
-                    getLinkIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 isPermanent_ = false;
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    deviceIds_ = null;
                     deviceIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000002);
                 if (endpointIdsBuilder_ == null) {
                     endpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
                 } else {
+                    endpointIds_ = null;
                     endpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 if (linkIdsBuilder_ == null) {
                     linkIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
                 } else {
+                    linkIds_ = null;
                     linkIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
                 return this;
             }
 
@@ -67022,67 +65761,49 @@ public final class ContextOuterClass {
             @java.lang.Override
             public context.ContextOuterClass.Constraint_Exclusions buildPartial() {
                 context.ContextOuterClass.Constraint_Exclusions result = new context.ContextOuterClass.Constraint_Exclusions(this);
-                int from_bitField0_ = bitField0_;
-                result.isPermanent_ = isPermanent_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.Constraint_Exclusions result) {
                 if (deviceIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000002) != 0)) {
                         deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000002);
                     }
                     result.deviceIds_ = deviceIds_;
                 } else {
                     result.deviceIds_ = deviceIdsBuilder_.build();
                 }
                 if (endpointIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
-                        bitField0_ = (bitField0_ & ~0x00000002);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.endpointIds_ = endpointIds_;
                 } else {
                     result.endpointIds_ = endpointIdsBuilder_.build();
                 }
                 if (linkIdsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000004) != 0)) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
                         linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-                        bitField0_ = (bitField0_ & ~0x00000004);
+                        bitField0_ = (bitField0_ & ~0x00000008);
                     }
                     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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_Exclusions result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.isPermanent_ = isPermanent_;
+                }
             }
 
             @java.lang.Override
@@ -67105,7 +65826,7 @@ public final class ContextOuterClass {
                     if (!other.deviceIds_.isEmpty()) {
                         if (deviceIds_.isEmpty()) {
                             deviceIds_ = other.deviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000002);
                         } else {
                             ensureDeviceIdsIsMutable();
                             deviceIds_.addAll(other.deviceIds_);
@@ -67118,7 +65839,7 @@ public final class ContextOuterClass {
                             deviceIdsBuilder_.dispose();
                             deviceIdsBuilder_ = null;
                             deviceIds_ = other.deviceIds_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000002);
                             deviceIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDeviceIdsFieldBuilder() : null;
                         } else {
                             deviceIdsBuilder_.addAllMessages(other.deviceIds_);
@@ -67129,7 +65850,7 @@ public final class ContextOuterClass {
                     if (!other.endpointIds_.isEmpty()) {
                         if (endpointIds_.isEmpty()) {
                             endpointIds_ = other.endpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureEndpointIdsIsMutable();
                             endpointIds_.addAll(other.endpointIds_);
@@ -67142,7 +65863,7 @@ public final class ContextOuterClass {
                             endpointIdsBuilder_.dispose();
                             endpointIdsBuilder_ = null;
                             endpointIds_ = other.endpointIds_;
-                            bitField0_ = (bitField0_ & ~0x00000002);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             endpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getEndpointIdsFieldBuilder() : null;
                         } else {
                             endpointIdsBuilder_.addAllMessages(other.endpointIds_);
@@ -67153,7 +65874,7 @@ public final class ContextOuterClass {
                     if (!other.linkIds_.isEmpty()) {
                         if (linkIds_.isEmpty()) {
                             linkIds_ = other.linkIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
                             ensureLinkIdsIsMutable();
                             linkIds_.addAll(other.linkIds_);
@@ -67166,14 +65887,14 @@ public final class ContextOuterClass {
                             linkIdsBuilder_.dispose();
                             linkIdsBuilder_ = null;
                             linkIds_ = other.linkIds_;
-                            bitField0_ = (bitField0_ & ~0x00000004);
+                            bitField0_ = (bitField0_ & ~0x00000008);
                             linkIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkIdsFieldBuilder() : null;
                         } else {
                             linkIdsBuilder_.addAllMessages(other.linkIds_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -67185,17 +65906,78 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Constraint_Exclusions parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    isPermanent_ = input.readBool();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 18:
+                                {
+                                    context.ContextOuterClass.DeviceId m = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+                                    if (deviceIdsBuilder_ == null) {
+                                        ensureDeviceIdsIsMutable();
+                                        deviceIds_.add(m);
+                                    } else {
+                                        deviceIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (endpointIdsBuilder_ == null) {
+                                        ensureEndpointIdsIsMutable();
+                                        endpointIds_.add(m);
+                                    } else {
+                                        endpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.LinkId m = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+                                    if (linkIdsBuilder_ == null) {
+                                        ensureLinkIdsIsMutable();
+                                        linkIds_.add(m);
+                                    } else {
+                                        linkIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint_Exclusions) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -67219,6 +66001,7 @@ public final class ContextOuterClass {
              */
             public Builder setIsPermanent(boolean value) {
                 isPermanent_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -67228,6 +66011,7 @@ public final class ContextOuterClass {
              * @return This builder for chaining.
              */
             public Builder clearIsPermanent() {
+                bitField0_ = (bitField0_ & ~0x00000001);
                 isPermanent_ = false;
                 onChanged();
                 return this;
@@ -67236,9 +66020,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ = java.util.Collections.emptyList();
 
             private void ensureDeviceIdsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000002) != 0)) {
                     deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000002;
                 }
             }
 
@@ -67390,7 +66174,7 @@ public final class ContextOuterClass {
             public Builder clearDeviceIds() {
                 if (deviceIdsBuilder_ == null) {
                     deviceIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000002);
                     onChanged();
                 } else {
                     deviceIdsBuilder_.clear();
@@ -67464,7 +66248,7 @@ public final class ContextOuterClass {
 
             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());
+                    deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(deviceIds_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
                     deviceIds_ = null;
                 }
                 return deviceIdsBuilder_;
@@ -67473,9 +66257,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_ = java.util.Collections.emptyList();
 
             private void ensureEndpointIdsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(endpointIds_);
-                    bitField0_ |= 0x00000002;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -67627,7 +66411,7 @@ public final class ContextOuterClass {
             public Builder clearEndpointIds() {
                 if (endpointIdsBuilder_ == null) {
                     endpointIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000002);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     endpointIdsBuilder_.clear();
@@ -67701,7 +66485,7 @@ public final class ContextOuterClass {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> getEndpointIdsFieldBuilder() {
                 if (endpointIdsBuilder_ == null) {
-                    endpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(endpointIds_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    endpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(endpointIds_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     endpointIds_ = null;
                 }
                 return endpointIdsBuilder_;
@@ -67710,9 +66494,9 @@ public final class ContextOuterClass {
             private java.util.List<context.ContextOuterClass.LinkId> linkIds_ = java.util.Collections.emptyList();
 
             private void ensureLinkIdsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
+                if (!((bitField0_ & 0x00000008) != 0)) {
                     linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-                    bitField0_ |= 0x00000004;
+                    bitField0_ |= 0x00000008;
                 }
             }
 
@@ -67864,7 +66648,7 @@ public final class ContextOuterClass {
             public Builder clearLinkIds() {
                 if (linkIdsBuilder_ == null) {
                     linkIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000004);
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
                     linkIdsBuilder_.clear();
@@ -67938,7 +66722,7 @@ public final class ContextOuterClass {
 
             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_ & 0x00000004) != 0), getParentForChildren(), isClean());
+                    linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(linkIds_, ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                     linkIds_ = null;
                 }
                 return linkIdsBuilder_;
@@ -67971,7 +66755,17 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Constraint_Exclusions parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Constraint_Exclusions(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -67990,776 +66784,676 @@ public final class ContextOuterClass {
         }
     }
 
-    public interface ConstraintOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Constraint)
+    public interface QoSProfileIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.QoSProfileId)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.ConstraintActionEnum action = 1;</code>
-         * @return The enum numeric value on the wire for action.
-         */
-        int getActionValue();
-
-        /**
-         * <code>.context.ConstraintActionEnum action = 1;</code>
-         * @return The action.
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
          */
-        context.ContextOuterClass.ConstraintActionEnum getAction();
+        boolean hasQosProfileId();
 
         /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         * @return Whether the custom field is set.
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return The qosProfileId.
          */
-        boolean hasCustom();
+        context.ContextOuterClass.Uuid getQosProfileId();
 
         /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         * @return The custom.
+         * <code>.context.Uuid qos_profile_id = 1;</code>
          */
-        context.ContextOuterClass.Constraint_Custom getCustom();
+        context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder();
+    }
 
-        /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         */
-        context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder();
+    /**
+     * Protobuf type {@code context.QoSProfileId}
+     */
+    public static final class QoSProfileId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.QoSProfileId)
+    QoSProfileIdOrBuilder {
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         * @return Whether the schedule field is set.
-         */
-        boolean hasSchedule();
+        private static final long serialVersionUID = 0L;
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         * @return The schedule.
-         */
-        context.ContextOuterClass.Constraint_Schedule getSchedule();
+        // Use QoSProfileId.newBuilder() to construct.
+        private QoSProfileId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         */
-        context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder();
+        private QoSProfileId() {
+        }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         * @return Whether the endpointLocation field is set.
-         */
-        boolean hasEndpointLocation();
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new QoSProfileId();
+        }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         * @return The endpointLocation.
-         */
-        context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation();
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
+        }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         */
-        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_QoSProfileId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.QoSProfileId.class, context.ContextOuterClass.QoSProfileId.Builder.class);
+        }
 
-        /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-         * @return Whether the endpointPriority field is set.
-         */
-        boolean hasEndpointPriority();
+        public static final int QOS_PROFILE_ID_FIELD_NUMBER = 1;
 
-        /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-         * @return The endpointPriority.
-         */
-        context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+        private context.ContextOuterClass.Uuid qosProfileId_;
 
         /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
          */
-        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+        @java.lang.Override
+        public boolean hasQosProfileId() {
+            return qosProfileId_ != null;
+        }
 
         /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-         * @return Whether the slaCapacity field is set.
+         * <code>.context.Uuid qos_profile_id = 1;</code>
+         * @return The qosProfileId.
          */
-        boolean hasSlaCapacity();
+        @java.lang.Override
+        public context.ContextOuterClass.Uuid getQosProfileId() {
+            return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+        }
 
         /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-         * @return The slaCapacity.
+         * <code>.context.Uuid qos_profile_id = 1;</code>
          */
-        context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
+        @java.lang.Override
+        public context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder() {
+            return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-         */
-        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
+        private byte memoizedIsInitialized = -1;
 
-        /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-         * @return Whether the slaLatency field is set.
-         */
-        boolean hasSlaLatency();
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-         * @return The slaLatency.
-         */
-        context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (qosProfileId_ != null) {
+                output.writeMessage(1, getQosProfileId());
+            }
+            getUnknownFields().writeTo(output);
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-         */
-        context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (qosProfileId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getQosProfileId());
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         * @return Whether the slaAvailability field is set.
-         */
-        boolean hasSlaAvailability();
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof context.ContextOuterClass.QoSProfileId)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.QoSProfileId other = (context.ContextOuterClass.QoSProfileId) obj;
+            if (hasQosProfileId() != other.hasQosProfileId())
+                return false;
+            if (hasQosProfileId()) {
+                if (!getQosProfileId().equals(other.getQosProfileId()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         * @return The slaAvailability.
-         */
-        context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasQosProfileId()) {
+                hash = (37 * hash) + QOS_PROFILE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getQosProfileId().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         */
-        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-         * @return Whether the slaIsolation field is set.
-         */
-        boolean hasSlaIsolation();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-         * @return The slaIsolation.
-         */
-        context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-         */
-        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-        /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-         * @return Whether the exclusions field is set.
-         */
-        boolean hasExclusions();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
 
-        /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-         * @return The exclusions.
-         */
-        context.ContextOuterClass.Constraint_Exclusions getExclusions();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
 
-        /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-         */
-        context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder();
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
 
-        public context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
-    }
+        public static context.ContextOuterClass.QoSProfileId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
 
-    /**
-     * Protobuf type {@code context.Constraint}
-     */
-    public static final class Constraint extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Constraint)
-    ConstraintOrBuilder {
+        public static context.ContextOuterClass.QoSProfileId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
 
-        private static final long serialVersionUID = 0L;
+        public static context.ContextOuterClass.QoSProfileId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
 
-        // Use Constraint.newBuilder() to construct.
-        private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-            super(builder);
+        public static context.ContextOuterClass.QoSProfileId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        private Constraint() {
-            action_ = 0;
+        public static context.ContextOuterClass.QoSProfileId 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
-        @SuppressWarnings({ "unused" })
-        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new Constraint();
+        public Builder newBuilderForType() {
+            return newBuilder();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
         }
 
-        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 8:
-                            {
-                                int rawValue = input.readEnum();
-                                action_ = rawValue;
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.Constraint_Custom.Builder subBuilder = null;
-                                if (constraintCase_ == 2) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_Custom) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_Custom.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Custom) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 2;
-                                break;
-                            }
-                        case 26:
-                            {
-                                context.ContextOuterClass.Constraint_Schedule.Builder subBuilder = null;
-                                if (constraintCase_ == 3) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_Schedule) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_Schedule.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Schedule) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 3;
-                                break;
-                            }
-                        case 34:
-                            {
-                                context.ContextOuterClass.Constraint_EndPointLocation.Builder subBuilder = null;
-                                if (constraintCase_ == 4) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_EndPointLocation) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_EndPointLocation.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 4;
-                                break;
-                            }
-                        case 42:
-                            {
-                                context.ContextOuterClass.Constraint_EndPointPriority.Builder subBuilder = null;
-                                if (constraintCase_ == 5) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_EndPointPriority.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 5;
-                                break;
-                            }
-                        case 50:
-                            {
-                                context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
-                                if (constraintCase_ == 6) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_SLA_Capacity.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 6;
-                                break;
-                            }
-                        case 58:
-                            {
-                                context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
-                                if (constraintCase_ == 7) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_SLA_Latency.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 7;
-                                break;
-                            }
-                        case 66:
-                            {
-                                context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
-                                if (constraintCase_ == 8) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_SLA_Availability.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 8;
-                                break;
-                            }
-                        case 74:
-                            {
-                                context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
-                                if (constraintCase_ == 9) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_SLA_Isolation_level.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 9;
-                                break;
-                            }
-                        case 82:
-                            {
-                                context.ContextOuterClass.Constraint_Exclusions.Builder subBuilder = null;
-                                if (constraintCase_ == 10) {
-                                    subBuilder = ((context.ContextOuterClass.Constraint_Exclusions) constraint_).toBuilder();
-                                }
-                                constraint_ = input.readMessage(context.ContextOuterClass.Constraint_Exclusions.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Exclusions) constraint_);
-                                    constraint_ = subBuilder.buildPartial();
-                                }
-                                constraintCase_ = 10;
-                                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 Builder newBuilder(context.ContextOuterClass.QoSProfileId prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
         }
 
         @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);
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
         }
 
-        private int constraintCase_ = 0;
+        /**
+         * Protobuf type {@code context.QoSProfileId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.QoSProfileId)
+        context.ContextOuterClass.QoSProfileIdOrBuilder {
 
-        private java.lang.Object constraint_;
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
+            }
 
-        public enum ConstraintCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.QoSProfileId.class, context.ContextOuterClass.QoSProfileId.Builder.class);
+            }
 
-            CUSTOM(2),
-            SCHEDULE(3),
-            ENDPOINT_LOCATION(4),
-            ENDPOINT_PRIORITY(5),
-            SLA_CAPACITY(6),
-            SLA_LATENCY(7),
-            SLA_AVAILABILITY(8),
-            SLA_ISOLATION(9),
-            EXCLUSIONS(10),
-            CONSTRAINT_NOT_SET(0);
+            // Construct using context.ContextOuterClass.QoSProfileId.newBuilder()
+            private Builder() {
+            }
 
-            private final int value;
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
 
-            private ConstraintCase(int value) {
-                this.value = value;
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                return this;
             }
 
-            /**
-             * @param value The number of the enum to look for.
-             * @return The enum associated with the given number.
-             * @deprecated Use {@link #forNumber(int)} instead.
-             */
-            @java.lang.Deprecated
-            public static ConstraintCase valueOf(int value) {
-                return forNumber(value);
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_QoSProfileId_descriptor;
             }
 
-            public static ConstraintCase forNumber(int value) {
-                switch(value) {
-                    case 2:
-                        return CUSTOM;
-                    case 3:
-                        return SCHEDULE;
-                    case 4:
-                        return ENDPOINT_LOCATION;
-                    case 5:
-                        return ENDPOINT_PRIORITY;
-                    case 6:
-                        return SLA_CAPACITY;
-                    case 7:
-                        return SLA_LATENCY;
-                    case 8:
-                        return SLA_AVAILABILITY;
-                    case 9:
-                        return SLA_ISOLATION;
-                    case 10:
-                        return EXCLUSIONS;
-                    case 0:
-                        return CONSTRAINT_NOT_SET;
-                    default:
-                        return null;
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId getDefaultInstanceForType() {
+                return context.ContextOuterClass.QoSProfileId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId build() {
+                context.ContextOuterClass.QoSProfileId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
                 }
+                return result;
             }
 
-            public int getNumber() {
-                return this.value;
+            @java.lang.Override
+            public context.ContextOuterClass.QoSProfileId buildPartial() {
+                context.ContextOuterClass.QoSProfileId result = new context.ContextOuterClass.QoSProfileId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
             }
-        }
 
-        public ConstraintCase getConstraintCase() {
-            return ConstraintCase.forNumber(constraintCase_);
-        }
+            private void buildPartial0(context.ContextOuterClass.QoSProfileId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.qosProfileId_ = qosProfileIdBuilder_ == null ? qosProfileId_ : qosProfileIdBuilder_.build();
+                }
+            }
 
-        public static final int ACTION_FIELD_NUMBER = 1;
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.QoSProfileId) {
+                    return mergeFrom((context.ContextOuterClass.QoSProfileId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
 
-        private int action_;
+            public Builder mergeFrom(context.ContextOuterClass.QoSProfileId other) {
+                if (other == context.ContextOuterClass.QoSProfileId.getDefaultInstance())
+                    return this;
+                if (other.hasQosProfileId()) {
+                    mergeQosProfileId(other.getQosProfileId());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
 
-        /**
-         * <code>.context.ConstraintActionEnum action = 1;</code>
-         * @return The enum numeric value on the wire for action.
-         */
-        @java.lang.Override
-        public int getActionValue() {
-            return action_;
-        }
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
 
-        /**
-         * <code>.context.ConstraintActionEnum action = 1;</code>
-         * @return The action.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.ConstraintActionEnum getAction() {
-            @SuppressWarnings("deprecation")
-            context.ContextOuterClass.ConstraintActionEnum result = context.ContextOuterClass.ConstraintActionEnum.valueOf(action_);
-            return result == null ? context.ContextOuterClass.ConstraintActionEnum.UNRECOGNIZED : result;
-        }
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getQosProfileIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
 
-        public static final int CUSTOM_FIELD_NUMBER = 2;
+            private int bitField0_;
 
-        /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         * @return Whether the custom field is set.
-         */
-        @java.lang.Override
-        public boolean hasCustom() {
-            return constraintCase_ == 2;
-        }
+            private context.ContextOuterClass.Uuid qosProfileId_;
 
-        /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         * @return The custom.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_Custom getCustom() {
-            if (constraintCase_ == 2) {
-                return (context.ContextOuterClass.Constraint_Custom) constraint_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> qosProfileIdBuilder_;
+
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             * @return Whether the qosProfileId field is set.
+             */
+            public boolean hasQosProfileId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
-            return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
-        }
 
-        /**
-         * <code>.context.Constraint_Custom custom = 2;</code>
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
-            if (constraintCase_ == 2) {
-                return (context.ContextOuterClass.Constraint_Custom) constraint_;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             * @return The qosProfileId.
+             */
+            public context.ContextOuterClass.Uuid getQosProfileId() {
+                if (qosProfileIdBuilder_ == null) {
+                    return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+                } else {
+                    return qosProfileIdBuilder_.getMessage();
+                }
             }
-            return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
-        }
 
-        public static final int SCHEDULE_FIELD_NUMBER = 3;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.Uuid value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    qosProfileId_ = value;
+                } else {
+                    qosProfileIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         * @return Whether the schedule field is set.
-         */
-        @java.lang.Override
-        public boolean hasSchedule() {
-            return constraintCase_ == 3;
-        }
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder setQosProfileId(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileId_ = builderForValue.build();
+                } else {
+                    qosProfileIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         * @return The schedule.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_Schedule getSchedule() {
-            if (constraintCase_ == 3) {
-                return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder mergeQosProfileId(context.ContextOuterClass.Uuid value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && qosProfileId_ != null && qosProfileId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getQosProfileIdBuilder().mergeFrom(value);
+                    } else {
+                        qosProfileId_ = value;
+                    }
+                } else {
+                    qosProfileIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
             }
-            return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
-        }
 
-        /**
-         * <code>.context.Constraint_Schedule schedule = 3;</code>
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
-            if (constraintCase_ == 3) {
-                return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public Builder clearQosProfileId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
             }
-            return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
-        }
 
-        public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.Uuid.Builder getQosProfileIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getQosProfileIdFieldBuilder().getBuilder();
+            }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         * @return Whether the endpointLocation field is set.
-         */
-        @java.lang.Override
-        public boolean hasEndpointLocation() {
-            return constraintCase_ == 4;
-        }
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            public context.ContextOuterClass.UuidOrBuilder getQosProfileIdOrBuilder() {
+                if (qosProfileIdBuilder_ != null) {
+                    return qosProfileIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return qosProfileId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : qosProfileId_;
+                }
+            }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         * @return The endpointLocation.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
-            if (constraintCase_ == 4) {
-                return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+            /**
+             * <code>.context.Uuid qos_profile_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getQosProfileIdFieldBuilder() {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getQosProfileId(), getParentForChildren(), isClean());
+                    qosProfileId_ = null;
+                }
+                return qosProfileIdBuilder_;
             }
-            return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
-        }
 
-        /**
-         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
-            if (constraintCase_ == 4) {
-                return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
             }
-            return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:context.QoSProfileId)
         }
 
-        public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 5;
+        // @@protoc_insertion_point(class_scope:context.QoSProfileId)
+        private static final context.ContextOuterClass.QoSProfileId DEFAULT_INSTANCE;
 
-        /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-         * @return Whether the endpointPriority field is set.
-         */
-        @java.lang.Override
-        public boolean hasEndpointPriority() {
-            return constraintCase_ == 5;
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.QoSProfileId();
         }
 
-        /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-         * @return The endpointPriority.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
-            if (constraintCase_ == 5) {
-                return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        public static context.ContextOuterClass.QoSProfileId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
         }
 
-        /**
-         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
-            if (constraintCase_ == 5) {
-                return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+        private static final com.google.protobuf.Parser<QoSProfileId> PARSER = new com.google.protobuf.AbstractParser<QoSProfileId>() {
+
+            @java.lang.Override
+            public QoSProfileId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
-            return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
-        }
+        };
 
-        public static final int SLA_CAPACITY_FIELD_NUMBER = 6;
+        public static com.google.protobuf.Parser<QoSProfileId> parser() {
+            return PARSER;
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-         * @return Whether the slaCapacity field is set.
-         */
         @java.lang.Override
-        public boolean hasSlaCapacity() {
-            return constraintCase_ == 6;
+        public com.google.protobuf.Parser<QoSProfileId> getParserForType() {
+            return PARSER;
         }
 
-        /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-         * @return The slaCapacity.
-         */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
-            if (constraintCase_ == 6) {
-                return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        public context.ContextOuterClass.QoSProfileId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
         }
+    }
+
+    public interface Constraint_QoSProfileOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Constraint_QoSProfile)
+    com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
          */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-            if (constraintCase_ == 6) {
-                return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
-        }
+        boolean hasQosProfileId();
 
-        public static final int SLA_LATENCY_FIELD_NUMBER = 7;
+        /**
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return The qosProfileId.
+         */
+        context.ContextOuterClass.QoSProfileId getQosProfileId();
 
         /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-         * @return Whether the slaLatency field is set.
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
          */
-        @java.lang.Override
-        public boolean hasSlaLatency() {
-            return constraintCase_ == 7;
-        }
+        context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder();
 
         /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-         * @return The slaLatency.
+         * <code>string qos_profile_name = 2;</code>
+         * @return The qosProfileName.
          */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
-            if (constraintCase_ == 7) {
-                return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
-        }
+        java.lang.String getQosProfileName();
 
         /**
-         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         * <code>string qos_profile_name = 2;</code>
+         * @return The bytes for qosProfileName.
          */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-            if (constraintCase_ == 7) {
-                return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        com.google.protobuf.ByteString getQosProfileNameBytes();
+    }
+
+    /**
+     * Protobuf type {@code context.Constraint_QoSProfile}
+     */
+    public static final class Constraint_QoSProfile extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Constraint_QoSProfile)
+    Constraint_QoSProfileOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use Constraint_QoSProfile.newBuilder() to construct.
+        private Constraint_QoSProfile(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
         }
 
-        public static final int SLA_AVAILABILITY_FIELD_NUMBER = 8;
+        private Constraint_QoSProfile() {
+            qosProfileName_ = "";
+        }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         * @return Whether the slaAvailability field is set.
-         */
         @java.lang.Override
-        public boolean hasSlaAvailability() {
-            return constraintCase_ == 8;
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Constraint_QoSProfile();
         }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         * @return The slaAvailability.
-         */
-        @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
-            if (constraintCase_ == 8) {
-                return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_descriptor;
         }
 
-        /**
-         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-         */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-            if (constraintCase_ == 8) {
-                return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Constraint_QoSProfile.class, context.ContextOuterClass.Constraint_QoSProfile.Builder.class);
         }
 
-        public static final int SLA_ISOLATION_FIELD_NUMBER = 9;
+        public static final int QOS_PROFILE_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.QoSProfileId qosProfileId_;
 
         /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-         * @return Whether the slaIsolation field is set.
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return Whether the qosProfileId field is set.
          */
         @java.lang.Override
-        public boolean hasSlaIsolation() {
-            return constraintCase_ == 9;
+        public boolean hasQosProfileId() {
+            return qosProfileId_ != null;
         }
 
         /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-         * @return The slaIsolation.
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+         * @return The qosProfileId.
          */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
-            if (constraintCase_ == 9) {
-                return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+        public context.ContextOuterClass.QoSProfileId getQosProfileId() {
+            return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
         }
 
         /**
-         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         * <code>.context.QoSProfileId qos_profile_id = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-            if (constraintCase_ == 9) {
-                return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
-            }
-            return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+        public context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder() {
+            return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
         }
 
-        public static final int EXCLUSIONS_FIELD_NUMBER = 10;
+        public static final int QOS_PROFILE_NAME_FIELD_NUMBER = 2;
 
-        /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-         * @return Whether the exclusions field is set.
-         */
-        @java.lang.Override
-        public boolean hasExclusions() {
-            return constraintCase_ == 10;
-        }
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object qosProfileName_ = "";
 
         /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-         * @return The exclusions.
+         * <code>string qos_profile_name = 2;</code>
+         * @return The qosProfileName.
          */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
-            if (constraintCase_ == 10) {
-                return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+        public java.lang.String getQosProfileName() {
+            java.lang.Object ref = qosProfileName_;
+            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();
+                qosProfileName_ = s;
+                return s;
             }
-            return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
         }
 
         /**
-         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         * <code>string qos_profile_name = 2;</code>
+         * @return The bytes for qosProfileName.
          */
         @java.lang.Override
-        public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
-            if (constraintCase_ == 10) {
-                return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+        public com.google.protobuf.ByteString getQosProfileNameBytes() {
+            java.lang.Object ref = qosProfileName_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                qosProfileName_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
             }
-            return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
         }
 
         private byte memoizedIsInitialized = -1;
@@ -68777,37 +67471,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (action_ != context.ContextOuterClass.ConstraintActionEnum.CONSTRAINTACTION_UNDEFINED.getNumber()) {
-                output.writeEnum(1, action_);
-            }
-            if (constraintCase_ == 2) {
-                output.writeMessage(2, (context.ContextOuterClass.Constraint_Custom) constraint_);
-            }
-            if (constraintCase_ == 3) {
-                output.writeMessage(3, (context.ContextOuterClass.Constraint_Schedule) constraint_);
-            }
-            if (constraintCase_ == 4) {
-                output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
-            }
-            if (constraintCase_ == 5) {
-                output.writeMessage(5, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
-            }
-            if (constraintCase_ == 6) {
-                output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
-            }
-            if (constraintCase_ == 7) {
-                output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
-            }
-            if (constraintCase_ == 8) {
-                output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
-            }
-            if (constraintCase_ == 9) {
-                output.writeMessage(9, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+            if (qosProfileId_ != null) {
+                output.writeMessage(1, getQosProfileId());
             }
-            if (constraintCase_ == 10) {
-                output.writeMessage(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(qosProfileName_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, qosProfileName_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -68816,37 +67486,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (action_ != context.ContextOuterClass.ConstraintActionEnum.CONSTRAINTACTION_UNDEFINED.getNumber()) {
-                size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, action_);
-            }
-            if (constraintCase_ == 2) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, (context.ContextOuterClass.Constraint_Custom) constraint_);
-            }
-            if (constraintCase_ == 3) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, (context.ContextOuterClass.Constraint_Schedule) constraint_);
-            }
-            if (constraintCase_ == 4) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
-            }
-            if (constraintCase_ == 5) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
-            }
-            if (constraintCase_ == 6) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
-            }
-            if (constraintCase_ == 7) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
-            }
-            if (constraintCase_ == 8) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
-            }
-            if (constraintCase_ == 9) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+            if (qosProfileId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getQosProfileId());
             }
-            if (constraintCase_ == 10) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(qosProfileName_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, qosProfileName_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -68856,55 +67502,19 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.Constraint)) {
+            if (!(obj instanceof context.ContextOuterClass.Constraint_QoSProfile)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
-            if (action_ != other.action_)
+            context.ContextOuterClass.Constraint_QoSProfile other = (context.ContextOuterClass.Constraint_QoSProfile) obj;
+            if (hasQosProfileId() != other.hasQosProfileId())
                 return false;
-            if (!getConstraintCase().equals(other.getConstraintCase()))
+            if (hasQosProfileId()) {
+                if (!getQosProfileId().equals(other.getQosProfileId()))
+                    return false;
+            }
+            if (!getQosProfileName().equals(other.getQosProfileName()))
                 return false;
-            switch(constraintCase_) {
-                case 2:
-                    if (!getCustom().equals(other.getCustom()))
-                        return false;
-                    break;
-                case 3:
-                    if (!getSchedule().equals(other.getSchedule()))
-                        return false;
-                    break;
-                case 4:
-                    if (!getEndpointLocation().equals(other.getEndpointLocation()))
-                        return false;
-                    break;
-                case 5:
-                    if (!getEndpointPriority().equals(other.getEndpointPriority()))
-                        return false;
-                    break;
-                case 6:
-                    if (!getSlaCapacity().equals(other.getSlaCapacity()))
-                        return false;
-                    break;
-                case 7:
-                    if (!getSlaLatency().equals(other.getSlaLatency()))
-                        return false;
-                    break;
-                case 8:
-                    if (!getSlaAvailability().equals(other.getSlaAvailability()))
-                        return false;
-                    break;
-                case 9:
-                    if (!getSlaIsolation().equals(other.getSlaIsolation()))
-                        return false;
-                    break;
-                case 10:
-                    if (!getExclusions().equals(other.getExclusions()))
-                        return false;
-                    break;
-                case 0:
-                default:
-            }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -68916,98 +67526,62 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + ACTION_FIELD_NUMBER;
-            hash = (53 * hash) + action_;
-            switch(constraintCase_) {
-                case 2:
-                    hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
-                    hash = (53 * hash) + getCustom().hashCode();
-                    break;
-                case 3:
-                    hash = (37 * hash) + SCHEDULE_FIELD_NUMBER;
-                    hash = (53 * hash) + getSchedule().hashCode();
-                    break;
-                case 4:
-                    hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
-                    hash = (53 * hash) + getEndpointLocation().hashCode();
-                    break;
-                case 5:
-                    hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
-                    hash = (53 * hash) + getEndpointPriority().hashCode();
-                    break;
-                case 6:
-                    hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
-                    hash = (53 * hash) + getSlaCapacity().hashCode();
-                    break;
-                case 7:
-                    hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
-                    hash = (53 * hash) + getSlaLatency().hashCode();
-                    break;
-                case 8:
-                    hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
-                    hash = (53 * hash) + getSlaAvailability().hashCode();
-                    break;
-                case 9:
-                    hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
-                    hash = (53 * hash) + getSlaIsolation().hashCode();
-                    break;
-                case 10:
-                    hash = (37 * hash) + EXCLUSIONS_FIELD_NUMBER;
-                    hash = (53 * hash) + getExclusions().hashCode();
-                    break;
-                case 0:
-                default:
+            if (hasQosProfileId()) {
+                hash = (37 * hash) + QOS_PROFILE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getQosProfileId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (37 * hash) + QOS_PROFILE_NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getQosProfileName().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.Constraint parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile 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 {
+        public static context.ContextOuterClass.Constraint_QoSProfile parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -69020,7 +67594,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.Constraint prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.Constraint_QoSProfile prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -69036,57 +67610,54 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.Constraint}
+         * Protobuf type {@code context.Constraint_QoSProfile}
          */
-        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 class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.Constraint_QoSProfile)
+        context.ContextOuterClass.Constraint_QoSProfileOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_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);
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Constraint_QoSProfile.class, context.ContextOuterClass.Constraint_QoSProfile.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.Constraint.newBuilder()
+            // Construct using context.ContextOuterClass.Constraint_QoSProfile.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;
-                constraintCase_ = 0;
-                constraint_ = null;
+                bitField0_ = 0;
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
+                }
+                qosProfileName_ = "";
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+                return context.ContextOuterClass.internal_static_context_Constraint_QoSProfile_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
-                return context.ContextOuterClass.Constraint.getDefaultInstance();
+            public context.ContextOuterClass.Constraint_QoSProfile getDefaultInstanceForType() {
+                return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Constraint build() {
-                context.ContextOuterClass.Constraint result = buildPartial();
+            public context.ContextOuterClass.Constraint_QoSProfile build() {
+                context.ContextOuterClass.Constraint_QoSProfile result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -69094,175 +67665,47 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Constraint buildPartial() {
-                context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
-                result.action_ = action_;
-                if (constraintCase_ == 2) {
-                    if (customBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = customBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 3) {
-                    if (scheduleBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = scheduleBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 4) {
-                    if (endpointLocationBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = endpointLocationBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 5) {
-                    if (endpointPriorityBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = endpointPriorityBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 6) {
-                    if (slaCapacityBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = slaCapacityBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 7) {
-                    if (slaLatencyBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = slaLatencyBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 8) {
-                    if (slaAvailabilityBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = slaAvailabilityBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 9) {
-                    if (slaIsolationBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = slaIsolationBuilder_.build();
-                    }
-                }
-                if (constraintCase_ == 10) {
-                    if (exclusionsBuilder_ == null) {
-                        result.constraint_ = constraint_;
-                    } else {
-                        result.constraint_ = exclusionsBuilder_.build();
-                    }
+            public context.ContextOuterClass.Constraint_QoSProfile buildPartial() {
+                context.ContextOuterClass.Constraint_QoSProfile result = new context.ContextOuterClass.Constraint_QoSProfile(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.constraintCase_ = constraintCase_;
                 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);
+            private void buildPartial0(context.ContextOuterClass.Constraint_QoSProfile result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.qosProfileId_ = qosProfileIdBuilder_ == null ? qosProfileId_ : qosProfileIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.qosProfileName_ = qosProfileName_;
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.Constraint) {
-                    return mergeFrom((context.ContextOuterClass.Constraint) other);
+                if (other instanceof context.ContextOuterClass.Constraint_QoSProfile) {
+                    return mergeFrom((context.ContextOuterClass.Constraint_QoSProfile) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
-                if (other == context.ContextOuterClass.Constraint.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.Constraint_QoSProfile other) {
+                if (other == context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance())
                     return this;
-                if (other.action_ != 0) {
-                    setActionValue(other.getActionValue());
+                if (other.hasQosProfileId()) {
+                    mergeQosProfileId(other.getQosProfileId());
                 }
-                switch(other.getConstraintCase()) {
-                    case CUSTOM:
-                        {
-                            mergeCustom(other.getCustom());
-                            break;
-                        }
-                    case SCHEDULE:
-                        {
-                            mergeSchedule(other.getSchedule());
-                            break;
-                        }
-                    case ENDPOINT_LOCATION:
-                        {
-                            mergeEndpointLocation(other.getEndpointLocation());
-                            break;
-                        }
-                    case ENDPOINT_PRIORITY:
-                        {
-                            mergeEndpointPriority(other.getEndpointPriority());
-                            break;
-                        }
-                    case SLA_CAPACITY:
-                        {
-                            mergeSlaCapacity(other.getSlaCapacity());
-                            break;
-                        }
-                    case SLA_LATENCY:
-                        {
-                            mergeSlaLatency(other.getSlaLatency());
-                            break;
-                        }
-                    case SLA_AVAILABILITY:
-                        {
-                            mergeSlaAvailability(other.getSlaAvailability());
-                            break;
-                        }
-                    case SLA_ISOLATION:
-                        {
-                            mergeSlaIsolation(other.getSlaIsolation());
-                            break;
-                        }
-                    case EXCLUSIONS:
-                        {
-                            mergeExclusions(other.getExclusions());
-                            break;
-                        }
-                    case CONSTRAINT_NOT_SET:
-                        {
-                            break;
-                        }
+                if (!other.getQosProfileName().isEmpty()) {
+                    qosProfileName_ = other.qosProfileName_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -69274,1359 +67717,3834 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getQosProfileIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    qosProfileName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
-            private int constraintCase_ = 0;
-
-            private java.lang.Object constraint_;
-
-            public ConstraintCase getConstraintCase() {
-                return ConstraintCase.forNumber(constraintCase_);
-            }
-
-            public Builder clearConstraint() {
-                constraintCase_ = 0;
-                constraint_ = null;
-                onChanged();
-                return this;
-            }
-
-            private int action_ = 0;
-
-            /**
-             * <code>.context.ConstraintActionEnum action = 1;</code>
-             * @return The enum numeric value on the wire for action.
-             */
-            @java.lang.Override
-            public int getActionValue() {
-                return action_;
-            }
-
-            /**
-             * <code>.context.ConstraintActionEnum 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.ConstraintActionEnum action = 1;</code>
-             * @return The action.
-             */
-            @java.lang.Override
-            public context.ContextOuterClass.ConstraintActionEnum getAction() {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.ConstraintActionEnum result = context.ContextOuterClass.ConstraintActionEnum.valueOf(action_);
-                return result == null ? context.ContextOuterClass.ConstraintActionEnum.UNRECOGNIZED : result;
-            }
-
-            /**
-             * <code>.context.ConstraintActionEnum action = 1;</code>
-             * @param value The action to set.
-             * @return This builder for chaining.
-             */
-            public Builder setAction(context.ContextOuterClass.ConstraintActionEnum value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                action_ = value.getNumber();
-                onChanged();
-                return this;
-            }
+            private int bitField0_;
 
-            /**
-             * <code>.context.ConstraintActionEnum action = 1;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearAction() {
-                action_ = 0;
-                onChanged();
-                return this;
-            }
+            private context.ContextOuterClass.QoSProfileId qosProfileId_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> customBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder> qosProfileIdBuilder_;
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
-             * @return Whether the custom field is set.
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             * @return Whether the qosProfileId field is set.
              */
-            @java.lang.Override
-            public boolean hasCustom() {
-                return constraintCase_ == 2;
+            public boolean hasQosProfileId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
-             * @return The custom.
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
+             * @return The qosProfileId.
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_Custom getCustom() {
-                if (customBuilder_ == null) {
-                    if (constraintCase_ == 2) {
-                        return (context.ContextOuterClass.Constraint_Custom) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+            public context.ContextOuterClass.QoSProfileId getQosProfileId() {
+                if (qosProfileIdBuilder_ == null) {
+                    return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
                 } else {
-                    if (constraintCase_ == 2) {
-                        return customBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                    return qosProfileIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            public Builder setCustom(context.ContextOuterClass.Constraint_Custom value) {
-                if (customBuilder_ == null) {
+            public Builder setQosProfileId(context.ContextOuterClass.QoSProfileId value) {
+                if (qosProfileIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    constraint_ = value;
-                    onChanged();
+                    qosProfileId_ = value;
                 } else {
-                    customBuilder_.setMessage(value);
+                    qosProfileIdBuilder_.setMessage(value);
                 }
-                constraintCase_ = 2;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            public Builder setCustom(context.ContextOuterClass.Constraint_Custom.Builder builderForValue) {
-                if (customBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
+            public Builder setQosProfileId(context.ContextOuterClass.QoSProfileId.Builder builderForValue) {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileId_ = builderForValue.build();
                 } else {
-                    customBuilder_.setMessage(builderForValue.build());
+                    qosProfileIdBuilder_.setMessage(builderForValue.build());
                 }
-                constraintCase_ = 2;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            public Builder mergeCustom(context.ContextOuterClass.Constraint_Custom value) {
-                if (customBuilder_ == null) {
-                    if (constraintCase_ == 2 && constraint_ != context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_Custom.newBuilder((context.ContextOuterClass.Constraint_Custom) constraint_).mergeFrom(value).buildPartial();
+            public Builder mergeQosProfileId(context.ContextOuterClass.QoSProfileId value) {
+                if (qosProfileIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && qosProfileId_ != null && qosProfileId_ != context.ContextOuterClass.QoSProfileId.getDefaultInstance()) {
+                        getQosProfileIdBuilder().mergeFrom(value);
                     } else {
-                        constraint_ = value;
+                        qosProfileId_ = value;
                     }
-                    onChanged();
                 } else {
-                    if (constraintCase_ == 2) {
-                        customBuilder_.mergeFrom(value);
-                    }
-                    customBuilder_.setMessage(value);
+                    qosProfileIdBuilder_.mergeFrom(value);
                 }
-                constraintCase_ = 2;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            public Builder clearCustom() {
-                if (customBuilder_ == null) {
-                    if (constraintCase_ == 2) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 2) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    customBuilder_.clear();
+            public Builder clearQosProfileId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                qosProfileId_ = null;
+                if (qosProfileIdBuilder_ != null) {
+                    qosProfileIdBuilder_.dispose();
+                    qosProfileIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            public context.ContextOuterClass.Constraint_Custom.Builder getCustomBuilder() {
-                return getCustomFieldBuilder().getBuilder();
+            public context.ContextOuterClass.QoSProfileId.Builder getQosProfileIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getQosProfileIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
-                if ((constraintCase_ == 2) && (customBuilder_ != null)) {
-                    return customBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.QoSProfileIdOrBuilder getQosProfileIdOrBuilder() {
+                if (qosProfileIdBuilder_ != null) {
+                    return qosProfileIdBuilder_.getMessageOrBuilder();
                 } else {
-                    if (constraintCase_ == 2) {
-                        return (context.ContextOuterClass.Constraint_Custom) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                    return qosProfileId_ == null ? context.ContextOuterClass.QoSProfileId.getDefaultInstance() : qosProfileId_;
                 }
             }
 
             /**
-             * <code>.context.Constraint_Custom custom = 2;</code>
+             * <code>.context.QoSProfileId qos_profile_id = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> getCustomFieldBuilder() {
-                if (customBuilder_ == null) {
-                    if (!(constraintCase_ == 2)) {
-                        constraint_ = context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
-                    }
-                    customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder>((context.ContextOuterClass.Constraint_Custom) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder> getQosProfileIdFieldBuilder() {
+                if (qosProfileIdBuilder_ == null) {
+                    qosProfileIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.QoSProfileId, context.ContextOuterClass.QoSProfileId.Builder, context.ContextOuterClass.QoSProfileIdOrBuilder>(getQosProfileId(), getParentForChildren(), isClean());
+                    qosProfileId_ = null;
                 }
-                constraintCase_ = 2;
-                onChanged();
-                ;
-                return customBuilder_;
+                return qosProfileIdBuilder_;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> scheduleBuilder_;
-
-            /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
-             * @return Whether the schedule field is set.
-             */
-            @java.lang.Override
-            public boolean hasSchedule() {
-                return constraintCase_ == 3;
-            }
+            private java.lang.Object qosProfileName_ = "";
 
             /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
-             * @return The schedule.
+             * <code>string qos_profile_name = 2;</code>
+             * @return The qosProfileName.
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_Schedule getSchedule() {
-                if (scheduleBuilder_ == null) {
-                    if (constraintCase_ == 3) {
-                        return (context.ContextOuterClass.Constraint_Schedule) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+            public java.lang.String getQosProfileName() {
+                java.lang.Object ref = qosProfileName_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    qosProfileName_ = s;
+                    return s;
                 } else {
-                    if (constraintCase_ == 3) {
-                        return scheduleBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+                    return (java.lang.String) ref;
                 }
             }
 
             /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * <code>string qos_profile_name = 2;</code>
+             * @return The bytes for qosProfileName.
              */
-            public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule value) {
-                if (scheduleBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    constraint_ = value;
-                    onChanged();
+            public com.google.protobuf.ByteString getQosProfileNameBytes() {
+                java.lang.Object ref = qosProfileName_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    qosProfileName_ = b;
+                    return b;
                 } else {
-                    scheduleBuilder_.setMessage(value);
+                    return (com.google.protobuf.ByteString) ref;
                 }
-                constraintCase_ = 3;
-                return this;
             }
 
             /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * <code>string qos_profile_name = 2;</code>
+             * @param value The qosProfileName to set.
+             * @return This builder for chaining.
              */
-            public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule.Builder builderForValue) {
-                if (scheduleBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
-                } else {
-                    scheduleBuilder_.setMessage(builderForValue.build());
+            public Builder setQosProfileName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
                 }
-                constraintCase_ = 3;
+                qosProfileName_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * <code>string qos_profile_name = 2;</code>
+             * @return This builder for chaining.
              */
-            public Builder mergeSchedule(context.ContextOuterClass.Constraint_Schedule value) {
-                if (scheduleBuilder_ == null) {
-                    if (constraintCase_ == 3 && constraint_ != context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_Schedule.newBuilder((context.ContextOuterClass.Constraint_Schedule) constraint_).mergeFrom(value).buildPartial();
-                    } else {
-                        constraint_ = value;
-                    }
-                    onChanged();
-                } else {
-                    if (constraintCase_ == 3) {
-                        scheduleBuilder_.mergeFrom(value);
-                    }
-                    scheduleBuilder_.setMessage(value);
-                }
-                constraintCase_ = 3;
+            public Builder clearQosProfileName() {
+                qosProfileName_ = getDefaultInstance().getQosProfileName();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * <code>string qos_profile_name = 2;</code>
+             * @param value The bytes for qosProfileName to set.
+             * @return This builder for chaining.
              */
-            public Builder clearSchedule() {
-                if (scheduleBuilder_ == null) {
-                    if (constraintCase_ == 3) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 3) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    scheduleBuilder_.clear();
+            public Builder setQosProfileNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
                 }
+                checkByteStringIsUtf8(value);
+                qosProfileName_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
-            /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
-             */
-            public context.ContextOuterClass.Constraint_Schedule.Builder getScheduleBuilder() {
-                return getScheduleFieldBuilder().getBuilder();
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
             }
 
-            /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
-             */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
-                if ((constraintCase_ == 3) && (scheduleBuilder_ != null)) {
-                    return scheduleBuilder_.getMessageOrBuilder();
-                } else {
-                    if (constraintCase_ == 3) {
-                        return (context.ContextOuterClass.Constraint_Schedule) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
-                }
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
             }
+            // @@protoc_insertion_point(builder_scope:context.Constraint_QoSProfile)
+        }
 
-            /**
-             * <code>.context.Constraint_Schedule schedule = 3;</code>
-             */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> getScheduleFieldBuilder() {
-                if (scheduleBuilder_ == null) {
-                    if (!(constraintCase_ == 3)) {
-                        constraint_ = context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
-                    }
-                    scheduleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder>((context.ContextOuterClass.Constraint_Schedule) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
-                }
-                constraintCase_ = 3;
-                onChanged();
-                ;
-                return scheduleBuilder_;
-            }
+        // @@protoc_insertion_point(class_scope:context.Constraint_QoSProfile)
+        private static final context.ContextOuterClass.Constraint_QoSProfile DEFAULT_INSTANCE;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> endpointLocationBuilder_;
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_QoSProfile();
+        }
 
-            /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-             * @return Whether the endpointLocation field is set.
+        public static context.ContextOuterClass.Constraint_QoSProfile getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<Constraint_QoSProfile> PARSER = new com.google.protobuf.AbstractParser<Constraint_QoSProfile>() {
+
+            @java.lang.Override
+            public Constraint_QoSProfile parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<Constraint_QoSProfile> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<Constraint_QoSProfile> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfile getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface ConstraintOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Constraint)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>.context.ConstraintActionEnum action = 1;</code>
+         * @return The enum numeric value on the wire for action.
+         */
+        int getActionValue();
+
+        /**
+         * <code>.context.ConstraintActionEnum action = 1;</code>
+         * @return The action.
+         */
+        context.ContextOuterClass.ConstraintActionEnum getAction();
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         * @return Whether the custom field is set.
+         */
+        boolean hasCustom();
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         * @return The custom.
+         */
+        context.ContextOuterClass.Constraint_Custom getCustom();
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         */
+        context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder();
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         * @return Whether the schedule field is set.
+         */
+        boolean hasSchedule();
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         * @return The schedule.
+         */
+        context.ContextOuterClass.Constraint_Schedule getSchedule();
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         */
+        context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder();
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         * @return Whether the endpointLocation field is set.
+         */
+        boolean hasEndpointLocation();
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         * @return The endpointLocation.
+         */
+        context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation();
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         */
+        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         * @return Whether the endpointPriority field is set.
+         */
+        boolean hasEndpointPriority();
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         * @return The endpointPriority.
+         */
+        context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         */
+        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         * @return Whether the slaCapacity field is set.
+         */
+        boolean hasSlaCapacity();
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         * @return The slaCapacity.
+         */
+        context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         */
+        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         * @return Whether the slaLatency field is set.
+         */
+        boolean hasSlaLatency();
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         * @return The slaLatency.
+         */
+        context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         */
+        context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         * @return Whether the slaAvailability field is set.
+         */
+        boolean hasSlaAvailability();
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         * @return The slaAvailability.
+         */
+        context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         */
+        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         * @return Whether the slaIsolation field is set.
+         */
+        boolean hasSlaIsolation();
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         * @return The slaIsolation.
+         */
+        context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         */
+        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         * @return Whether the exclusions field is set.
+         */
+        boolean hasExclusions();
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         * @return The exclusions.
+         */
+        context.ContextOuterClass.Constraint_Exclusions getExclusions();
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         */
+        context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder();
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return Whether the qosProfile field is set.
+         */
+        boolean hasQosProfile();
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return The qosProfile.
+         */
+        context.ContextOuterClass.Constraint_QoSProfile getQosProfile();
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         */
+        context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder();
+
+        context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
+    }
+
+    /**
+     * 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() {
+            action_ = 0;
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Constraint();
+        }
+
+        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);
+        }
+
+        private int constraintCase_ = 0;
+
+        @SuppressWarnings("serial")
+        private java.lang.Object constraint_;
+
+        public enum ConstraintCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+
+            CUSTOM(2),
+            SCHEDULE(3),
+            ENDPOINT_LOCATION(4),
+            ENDPOINT_PRIORITY(5),
+            SLA_CAPACITY(6),
+            SLA_LATENCY(7),
+            SLA_AVAILABILITY(8),
+            SLA_ISOLATION(9),
+            EXCLUSIONS(10),
+            QOS_PROFILE(11),
+            CONSTRAINT_NOT_SET(0);
+
+            private final int value;
+
+            private ConstraintCase(int value) {
+                this.value = value;
+            }
+
+            /**
+             * @param value The number of the enum to look for.
+             * @return The enum associated with the given number.
+             * @deprecated Use {@link #forNumber(int)} instead.
+             */
+            @java.lang.Deprecated
+            public static ConstraintCase valueOf(int value) {
+                return forNumber(value);
+            }
+
+            public static ConstraintCase forNumber(int value) {
+                switch(value) {
+                    case 2:
+                        return CUSTOM;
+                    case 3:
+                        return SCHEDULE;
+                    case 4:
+                        return ENDPOINT_LOCATION;
+                    case 5:
+                        return ENDPOINT_PRIORITY;
+                    case 6:
+                        return SLA_CAPACITY;
+                    case 7:
+                        return SLA_LATENCY;
+                    case 8:
+                        return SLA_AVAILABILITY;
+                    case 9:
+                        return SLA_ISOLATION;
+                    case 10:
+                        return EXCLUSIONS;
+                    case 11:
+                        return QOS_PROFILE;
+                    case 0:
+                        return CONSTRAINT_NOT_SET;
+                    default:
+                        return null;
+                }
+            }
+
+            public int getNumber() {
+                return this.value;
+            }
+        }
+
+        public ConstraintCase getConstraintCase() {
+            return ConstraintCase.forNumber(constraintCase_);
+        }
+
+        public static final int ACTION_FIELD_NUMBER = 1;
+
+        private int action_ = 0;
+
+        /**
+         * <code>.context.ConstraintActionEnum action = 1;</code>
+         * @return The enum numeric value on the wire for action.
+         */
+        @java.lang.Override
+        public int getActionValue() {
+            return action_;
+        }
+
+        /**
+         * <code>.context.ConstraintActionEnum action = 1;</code>
+         * @return The action.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.ConstraintActionEnum getAction() {
+            context.ContextOuterClass.ConstraintActionEnum result = context.ContextOuterClass.ConstraintActionEnum.forNumber(action_);
+            return result == null ? context.ContextOuterClass.ConstraintActionEnum.UNRECOGNIZED : result;
+        }
+
+        public static final int CUSTOM_FIELD_NUMBER = 2;
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         * @return Whether the custom field is set.
+         */
+        @java.lang.Override
+        public boolean hasCustom() {
+            return constraintCase_ == 2;
+        }
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         * @return The custom.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_Custom getCustom() {
+            if (constraintCase_ == 2) {
+                return (context.ContextOuterClass.Constraint_Custom) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_Custom custom = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+            if (constraintCase_ == 2) {
+                return (context.ContextOuterClass.Constraint_Custom) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+
+        public static final int SCHEDULE_FIELD_NUMBER = 3;
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         * @return Whether the schedule field is set.
+         */
+        @java.lang.Override
+        public boolean hasSchedule() {
+            return constraintCase_ == 3;
+        }
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         * @return The schedule.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+            if (constraintCase_ == 3) {
+                return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_Schedule schedule = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+            if (constraintCase_ == 3) {
+                return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+
+        public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         * @return Whether the endpointLocation field is set.
+         */
+        @java.lang.Override
+        public boolean hasEndpointLocation() {
+            return constraintCase_ == 4;
+        }
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         * @return The endpointLocation.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+            if (constraintCase_ == 4) {
+                return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+            if (constraintCase_ == 4) {
+                return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+
+        public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 5;
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         * @return Whether the endpointPriority field is set.
+         */
+        @java.lang.Override
+        public boolean hasEndpointPriority() {
+            return constraintCase_ == 5;
+        }
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         * @return The endpointPriority.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+            if (constraintCase_ == 5) {
+                return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+            if (constraintCase_ == 5) {
+                return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+
+        public static final int SLA_CAPACITY_FIELD_NUMBER = 6;
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         * @return Whether the slaCapacity field is set.
+         */
+        @java.lang.Override
+        public boolean hasSlaCapacity() {
+            return constraintCase_ == 6;
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         * @return The slaCapacity.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+            if (constraintCase_ == 6) {
+                return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+            if (constraintCase_ == 6) {
+                return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
+
+        public static final int SLA_LATENCY_FIELD_NUMBER = 7;
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         * @return Whether the slaLatency field is set.
+         */
+        @java.lang.Override
+        public boolean hasSlaLatency() {
+            return constraintCase_ == 7;
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         * @return The slaLatency.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+            if (constraintCase_ == 7) {
+                return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+            if (constraintCase_ == 7) {
+                return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        }
+
+        public static final int SLA_AVAILABILITY_FIELD_NUMBER = 8;
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         * @return Whether the slaAvailability field is set.
+         */
+        @java.lang.Override
+        public boolean hasSlaAvailability() {
+            return constraintCase_ == 8;
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         * @return The slaAvailability.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+            if (constraintCase_ == 8) {
+                return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+            if (constraintCase_ == 8) {
+                return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        }
+
+        public static final int SLA_ISOLATION_FIELD_NUMBER = 9;
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         * @return Whether the slaIsolation field is set.
+         */
+        @java.lang.Override
+        public boolean hasSlaIsolation() {
+            return constraintCase_ == 9;
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         * @return The slaIsolation.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+            if (constraintCase_ == 9) {
+                return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+            if (constraintCase_ == 9) {
+                return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+        }
+
+        public static final int EXCLUSIONS_FIELD_NUMBER = 10;
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         * @return Whether the exclusions field is set.
+         */
+        @java.lang.Override
+        public boolean hasExclusions() {
+            return constraintCase_ == 10;
+        }
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         * @return The exclusions.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
+            if (constraintCase_ == 10) {
+                return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
+            if (constraintCase_ == 10) {
+                return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+        }
+
+        public static final int QOS_PROFILE_FIELD_NUMBER = 11;
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return Whether the qosProfile field is set.
+         */
+        @java.lang.Override
+        public boolean hasQosProfile() {
+            return constraintCase_ == 11;
+        }
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         * @return The qosProfile.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfile getQosProfile() {
+            if (constraintCase_ == 11) {
+                return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+        }
+
+        /**
+         * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder() {
+            if (constraintCase_ == 11) {
+                return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
+            }
+            return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+        }
+
+        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.ConstraintActionEnum.CONSTRAINTACTION_UNDEFINED.getNumber()) {
+                output.writeEnum(1, action_);
+            }
+            if (constraintCase_ == 2) {
+                output.writeMessage(2, (context.ContextOuterClass.Constraint_Custom) constraint_);
+            }
+            if (constraintCase_ == 3) {
+                output.writeMessage(3, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+            }
+            if (constraintCase_ == 4) {
+                output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+            }
+            if (constraintCase_ == 5) {
+                output.writeMessage(5, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+            }
+            if (constraintCase_ == 6) {
+                output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+            }
+            if (constraintCase_ == 7) {
+                output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+            }
+            if (constraintCase_ == 8) {
+                output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+            }
+            if (constraintCase_ == 9) {
+                output.writeMessage(9, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+            }
+            if (constraintCase_ == 10) {
+                output.writeMessage(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+            }
+            if (constraintCase_ == 11) {
+                output.writeMessage(11, (context.ContextOuterClass.Constraint_QoSProfile) constraint_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (action_ != context.ContextOuterClass.ConstraintActionEnum.CONSTRAINTACTION_UNDEFINED.getNumber()) {
+                size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, action_);
+            }
+            if (constraintCase_ == 2) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, (context.ContextOuterClass.Constraint_Custom) constraint_);
+            }
+            if (constraintCase_ == 3) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+            }
+            if (constraintCase_ == 4) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+            }
+            if (constraintCase_ == 5) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+            }
+            if (constraintCase_ == 6) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+            }
+            if (constraintCase_ == 7) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+            }
+            if (constraintCase_ == 8) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+            }
+            if (constraintCase_ == 9) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+            }
+            if (constraintCase_ == 10) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+            }
+            if (constraintCase_ == 11) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, (context.ContextOuterClass.Constraint_QoSProfile) constraint_);
+            }
+            size += getUnknownFields().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 (action_ != other.action_)
+                return false;
+            if (!getConstraintCase().equals(other.getConstraintCase()))
+                return false;
+            switch(constraintCase_) {
+                case 2:
+                    if (!getCustom().equals(other.getCustom()))
+                        return false;
+                    break;
+                case 3:
+                    if (!getSchedule().equals(other.getSchedule()))
+                        return false;
+                    break;
+                case 4:
+                    if (!getEndpointLocation().equals(other.getEndpointLocation()))
+                        return false;
+                    break;
+                case 5:
+                    if (!getEndpointPriority().equals(other.getEndpointPriority()))
+                        return false;
+                    break;
+                case 6:
+                    if (!getSlaCapacity().equals(other.getSlaCapacity()))
+                        return false;
+                    break;
+                case 7:
+                    if (!getSlaLatency().equals(other.getSlaLatency()))
+                        return false;
+                    break;
+                case 8:
+                    if (!getSlaAvailability().equals(other.getSlaAvailability()))
+                        return false;
+                    break;
+                case 9:
+                    if (!getSlaIsolation().equals(other.getSlaIsolation()))
+                        return false;
+                    break;
+                case 10:
+                    if (!getExclusions().equals(other.getExclusions()))
+                        return false;
+                    break;
+                case 11:
+                    if (!getQosProfile().equals(other.getQosProfile()))
+                        return false;
+                    break;
+                case 0:
+                default:
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                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_;
+            switch(constraintCase_) {
+                case 2:
+                    hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+                    hash = (53 * hash) + getCustom().hashCode();
+                    break;
+                case 3:
+                    hash = (37 * hash) + SCHEDULE_FIELD_NUMBER;
+                    hash = (53 * hash) + getSchedule().hashCode();
+                    break;
+                case 4:
+                    hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+                    hash = (53 * hash) + getEndpointLocation().hashCode();
+                    break;
+                case 5:
+                    hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
+                    hash = (53 * hash) + getEndpointPriority().hashCode();
+                    break;
+                case 6:
+                    hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
+                    hash = (53 * hash) + getSlaCapacity().hashCode();
+                    break;
+                case 7:
+                    hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
+                    hash = (53 * hash) + getSlaLatency().hashCode();
+                    break;
+                case 8:
+                    hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
+                    hash = (53 * hash) + getSlaAvailability().hashCode();
+                    break;
+                case 9:
+                    hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
+                    hash = (53 * hash) + getSlaIsolation().hashCode();
+                    break;
+                case 10:
+                    hash = (37 * hash) + EXCLUSIONS_FIELD_NUMBER;
+                    hash = (53 * hash) + getExclusions().hashCode();
+                    break;
+                case 11:
+                    hash = (37 * hash) + QOS_PROFILE_FIELD_NUMBER;
+                    hash = (53 * hash) + getQosProfile().hashCode();
+                    break;
+                case 0:
+                default:
+            }
+            hash = (29 * hash) + getUnknownFields().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;
+        }
+
+        /**
+         * 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() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                action_ = 0;
+                if (customBuilder_ != null) {
+                    customBuilder_.clear();
+                }
+                if (scheduleBuilder_ != null) {
+                    scheduleBuilder_.clear();
+                }
+                if (endpointLocationBuilder_ != null) {
+                    endpointLocationBuilder_.clear();
+                }
+                if (endpointPriorityBuilder_ != null) {
+                    endpointPriorityBuilder_.clear();
+                }
+                if (slaCapacityBuilder_ != null) {
+                    slaCapacityBuilder_.clear();
+                }
+                if (slaLatencyBuilder_ != null) {
+                    slaLatencyBuilder_.clear();
+                }
+                if (slaAvailabilityBuilder_ != null) {
+                    slaAvailabilityBuilder_.clear();
+                }
+                if (slaIsolationBuilder_ != null) {
+                    slaIsolationBuilder_.clear();
+                }
+                if (exclusionsBuilder_ != null) {
+                    exclusionsBuilder_.clear();
+                }
+                if (qosProfileBuilder_ != null) {
+                    qosProfileBuilder_.clear();
+                }
+                constraintCase_ = 0;
+                constraint_ = null;
+                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);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                buildPartialOneofs(result);
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.Constraint result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.action_ = action_;
+                }
+            }
+
+            private void buildPartialOneofs(context.ContextOuterClass.Constraint result) {
+                result.constraintCase_ = constraintCase_;
+                result.constraint_ = this.constraint_;
+                if (constraintCase_ == 2 && customBuilder_ != null) {
+                    result.constraint_ = customBuilder_.build();
+                }
+                if (constraintCase_ == 3 && scheduleBuilder_ != null) {
+                    result.constraint_ = scheduleBuilder_.build();
+                }
+                if (constraintCase_ == 4 && endpointLocationBuilder_ != null) {
+                    result.constraint_ = endpointLocationBuilder_.build();
+                }
+                if (constraintCase_ == 5 && endpointPriorityBuilder_ != null) {
+                    result.constraint_ = endpointPriorityBuilder_.build();
+                }
+                if (constraintCase_ == 6 && slaCapacityBuilder_ != null) {
+                    result.constraint_ = slaCapacityBuilder_.build();
+                }
+                if (constraintCase_ == 7 && slaLatencyBuilder_ != null) {
+                    result.constraint_ = slaLatencyBuilder_.build();
+                }
+                if (constraintCase_ == 8 && slaAvailabilityBuilder_ != null) {
+                    result.constraint_ = slaAvailabilityBuilder_.build();
+                }
+                if (constraintCase_ == 9 && slaIsolationBuilder_ != null) {
+                    result.constraint_ = slaIsolationBuilder_.build();
+                }
+                if (constraintCase_ == 10 && exclusionsBuilder_ != null) {
+                    result.constraint_ = exclusionsBuilder_.build();
+                }
+                if (constraintCase_ == 11 && qosProfileBuilder_ != null) {
+                    result.constraint_ = qosProfileBuilder_.build();
+                }
+            }
+
+            @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.action_ != 0) {
+                    setActionValue(other.getActionValue());
+                }
+                switch(other.getConstraintCase()) {
+                    case CUSTOM:
+                        {
+                            mergeCustom(other.getCustom());
+                            break;
+                        }
+                    case SCHEDULE:
+                        {
+                            mergeSchedule(other.getSchedule());
+                            break;
+                        }
+                    case ENDPOINT_LOCATION:
+                        {
+                            mergeEndpointLocation(other.getEndpointLocation());
+                            break;
+                        }
+                    case ENDPOINT_PRIORITY:
+                        {
+                            mergeEndpointPriority(other.getEndpointPriority());
+                            break;
+                        }
+                    case SLA_CAPACITY:
+                        {
+                            mergeSlaCapacity(other.getSlaCapacity());
+                            break;
+                        }
+                    case SLA_LATENCY:
+                        {
+                            mergeSlaLatency(other.getSlaLatency());
+                            break;
+                        }
+                    case SLA_AVAILABILITY:
+                        {
+                            mergeSlaAvailability(other.getSlaAvailability());
+                            break;
+                        }
+                    case SLA_ISOLATION:
+                        {
+                            mergeSlaIsolation(other.getSlaIsolation());
+                            break;
+                        }
+                    case EXCLUSIONS:
+                        {
+                            mergeExclusions(other.getExclusions());
+                            break;
+                        }
+                    case QOS_PROFILE:
+                        {
+                            mergeQosProfile(other.getQosProfile());
+                            break;
+                        }
+                    case CONSTRAINT_NOT_SET:
+                        {
+                            break;
+                        }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    action_ = input.readEnum();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 18:
+                                {
+                                    input.readMessage(getCustomFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 2;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getScheduleFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 3;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    input.readMessage(getEndpointLocationFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 4;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getEndpointPriorityFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 5;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getSlaCapacityFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 6;
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    input.readMessage(getSlaLatencyFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 7;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    input.readMessage(getSlaAvailabilityFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 8;
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    input.readMessage(getSlaIsolationFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 9;
+                                    break;
+                                }
+                            // case 74
+                            case 82:
+                                {
+                                    input.readMessage(getExclusionsFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 10;
+                                    break;
+                                }
+                            // case 82
+                            case 90:
+                                {
+                                    input.readMessage(getQosProfileFieldBuilder().getBuilder(), extensionRegistry);
+                                    constraintCase_ = 11;
+                                    break;
+                                }
+                            // case 90
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int constraintCase_ = 0;
+
+            private java.lang.Object constraint_;
+
+            public ConstraintCase getConstraintCase() {
+                return ConstraintCase.forNumber(constraintCase_);
+            }
+
+            public Builder clearConstraint() {
+                constraintCase_ = 0;
+                constraint_ = null;
+                onChanged();
+                return this;
+            }
+
+            private int bitField0_;
+
+            private int action_ = 0;
+
+            /**
+             * <code>.context.ConstraintActionEnum action = 1;</code>
+             * @return The enum numeric value on the wire for action.
+             */
+            @java.lang.Override
+            public int getActionValue() {
+                return action_;
+            }
+
+            /**
+             * <code>.context.ConstraintActionEnum 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;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.ConstraintActionEnum action = 1;</code>
+             * @return The action.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.ConstraintActionEnum getAction() {
+                context.ContextOuterClass.ConstraintActionEnum result = context.ContextOuterClass.ConstraintActionEnum.forNumber(action_);
+                return result == null ? context.ContextOuterClass.ConstraintActionEnum.UNRECOGNIZED : result;
+            }
+
+            /**
+             * <code>.context.ConstraintActionEnum action = 1;</code>
+             * @param value The action to set.
+             * @return This builder for chaining.
+             */
+            public Builder setAction(context.ContextOuterClass.ConstraintActionEnum value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                bitField0_ |= 0x00000001;
+                action_ = value.getNumber();
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.ConstraintActionEnum action = 1;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearAction() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                action_ = 0;
+                onChanged();
+                return this;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> customBuilder_;
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             * @return Whether the custom field is set.
+             */
+            @java.lang.Override
+            public boolean hasCustom() {
+                return constraintCase_ == 2;
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             * @return The custom.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_Custom getCustom() {
+                if (customBuilder_ == null) {
+                    if (constraintCase_ == 2) {
+                        return (context.ContextOuterClass.Constraint_Custom) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 2) {
+                        return customBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            public Builder setCustom(context.ContextOuterClass.Constraint_Custom value) {
+                if (customBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    customBuilder_.setMessage(value);
+                }
+                constraintCase_ = 2;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            public Builder setCustom(context.ContextOuterClass.Constraint_Custom.Builder builderForValue) {
+                if (customBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    customBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 2;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            public Builder mergeCustom(context.ContextOuterClass.Constraint_Custom value) {
+                if (customBuilder_ == null) {
+                    if (constraintCase_ == 2 && constraint_ != context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_Custom.newBuilder((context.ContextOuterClass.Constraint_Custom) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 2) {
+                        customBuilder_.mergeFrom(value);
+                    } else {
+                        customBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 2;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            public Builder clearCustom() {
+                if (customBuilder_ == null) {
+                    if (constraintCase_ == 2) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 2) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    customBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            public context.ContextOuterClass.Constraint_Custom.Builder getCustomBuilder() {
+                return getCustomFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+                if ((constraintCase_ == 2) && (customBuilder_ != null)) {
+                    return customBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 2) {
+                        return (context.ContextOuterClass.Constraint_Custom) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_Custom custom = 2;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> getCustomFieldBuilder() {
+                if (customBuilder_ == null) {
+                    if (!(constraintCase_ == 2)) {
+                        constraint_ = context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+                    }
+                    customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder>((context.ContextOuterClass.Constraint_Custom) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 2;
+                onChanged();
+                return customBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> scheduleBuilder_;
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * @return Whether the schedule field is set.
+             */
+            @java.lang.Override
+            public boolean hasSchedule() {
+                return constraintCase_ == 3;
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             * @return The schedule.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+                if (scheduleBuilder_ == null) {
+                    if (constraintCase_ == 3) {
+                        return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 3) {
+                        return scheduleBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+                if (scheduleBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    scheduleBuilder_.setMessage(value);
+                }
+                constraintCase_ = 3;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule.Builder builderForValue) {
+                if (scheduleBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    scheduleBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 3;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            public Builder mergeSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+                if (scheduleBuilder_ == null) {
+                    if (constraintCase_ == 3 && constraint_ != context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_Schedule.newBuilder((context.ContextOuterClass.Constraint_Schedule) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 3) {
+                        scheduleBuilder_.mergeFrom(value);
+                    } else {
+                        scheduleBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 3;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            public Builder clearSchedule() {
+                if (scheduleBuilder_ == null) {
+                    if (constraintCase_ == 3) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 3) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    scheduleBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            public context.ContextOuterClass.Constraint_Schedule.Builder getScheduleBuilder() {
+                return getScheduleFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+                if ((constraintCase_ == 3) && (scheduleBuilder_ != null)) {
+                    return scheduleBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 3) {
+                        return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_Schedule schedule = 3;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> getScheduleFieldBuilder() {
+                if (scheduleBuilder_ == null) {
+                    if (!(constraintCase_ == 3)) {
+                        constraint_ = context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+                    }
+                    scheduleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder>((context.ContextOuterClass.Constraint_Schedule) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 3;
+                onChanged();
+                return scheduleBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> endpointLocationBuilder_;
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * @return Whether the endpointLocation field is set.
+             */
+            @java.lang.Override
+            public boolean hasEndpointLocation() {
+                return constraintCase_ == 4;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * @return The endpointLocation.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+                if (endpointLocationBuilder_ == null) {
+                    if (constraintCase_ == 4) {
+                        return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 4) {
+                        return endpointLocationBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+                if (endpointLocationBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    endpointLocationBuilder_.setMessage(value);
+                }
+                constraintCase_ = 4;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation.Builder builderForValue) {
+                if (endpointLocationBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    endpointLocationBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 4;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            public Builder mergeEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+                if (endpointLocationBuilder_ == null) {
+                    if (constraintCase_ == 4 && constraint_ != context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.newBuilder((context.ContextOuterClass.Constraint_EndPointLocation) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 4) {
+                        endpointLocationBuilder_.mergeFrom(value);
+                    } else {
+                        endpointLocationBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 4;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            public Builder clearEndpointLocation() {
+                if (endpointLocationBuilder_ == null) {
+                    if (constraintCase_ == 4) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 4) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    endpointLocationBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            public context.ContextOuterClass.Constraint_EndPointLocation.Builder getEndpointLocationBuilder() {
+                return getEndpointLocationFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+                if ((constraintCase_ == 4) && (endpointLocationBuilder_ != null)) {
+                    return endpointLocationBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 4) {
+                        return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> getEndpointLocationFieldBuilder() {
+                if (endpointLocationBuilder_ == null) {
+                    if (!(constraintCase_ == 4)) {
+                        constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                    }
+                    endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder>((context.ContextOuterClass.Constraint_EndPointLocation) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 4;
+                onChanged();
+                return endpointLocationBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * @return Whether the endpointPriority field is set.
+             */
+            @java.lang.Override
+            public boolean hasEndpointPriority() {
+                return constraintCase_ == 5;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * @return The endpointPriority.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+                if (endpointPriorityBuilder_ == null) {
+                    if (constraintCase_ == 5) {
+                        return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 5) {
+                        return endpointPriorityBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+                if (endpointPriorityBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    endpointPriorityBuilder_.setMessage(value);
+                }
+                constraintCase_ = 5;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
+                if (endpointPriorityBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    endpointPriorityBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 5;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+                if (endpointPriorityBuilder_ == null) {
+                    if (constraintCase_ == 5 && constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 5) {
+                        endpointPriorityBuilder_.mergeFrom(value);
+                    } else {
+                        endpointPriorityBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 5;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            public Builder clearEndpointPriority() {
+                if (endpointPriorityBuilder_ == null) {
+                    if (constraintCase_ == 5) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 5) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    endpointPriorityBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
+                return getEndpointPriorityFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+                if ((constraintCase_ == 5) && (endpointPriorityBuilder_ != null)) {
+                    return endpointPriorityBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 5) {
+                        return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> getEndpointPriorityFieldBuilder() {
+                if (endpointPriorityBuilder_ == null) {
+                    if (!(constraintCase_ == 5)) {
+                        constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                    }
+                    endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>((context.ContextOuterClass.Constraint_EndPointPriority) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 5;
+                onChanged();
+                return endpointPriorityBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * @return Whether the slaCapacity field is set.
+             */
+            @java.lang.Override
+            public boolean hasSlaCapacity() {
+                return constraintCase_ == 6;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * @return The slaCapacity.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+                if (slaCapacityBuilder_ == null) {
+                    if (constraintCase_ == 6) {
+                        return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 6) {
+                        return slaCapacityBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+                if (slaCapacityBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    slaCapacityBuilder_.setMessage(value);
+                }
+                constraintCase_ = 6;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
+                if (slaCapacityBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    slaCapacityBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 6;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+                if (slaCapacityBuilder_ == null) {
+                    if (constraintCase_ == 6 && constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 6) {
+                        slaCapacityBuilder_.mergeFrom(value);
+                    } else {
+                        slaCapacityBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 6;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            public Builder clearSlaCapacity() {
+                if (slaCapacityBuilder_ == null) {
+                    if (constraintCase_ == 6) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 6) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    slaCapacityBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
+                return getSlaCapacityFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
              */
             @java.lang.Override
-            public boolean hasEndpointLocation() {
-                return constraintCase_ == 4;
+            public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+                if ((constraintCase_ == 6) && (slaCapacityBuilder_ != null)) {
+                    return slaCapacityBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 6) {
+                        return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                }
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
-             * @return The endpointLocation.
+             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> getSlaCapacityFieldBuilder() {
+                if (slaCapacityBuilder_ == null) {
+                    if (!(constraintCase_ == 6)) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                    }
+                    slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder>((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 6;
+                onChanged();
+                return slaCapacityBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
+
+            /**
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+             * @return Whether the slaLatency field is set.
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
-                if (endpointLocationBuilder_ == null) {
-                    if (constraintCase_ == 4) {
-                        return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+            public boolean hasSlaLatency() {
+                return constraintCase_ == 7;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
+             * @return The slaLatency.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+                if (slaLatencyBuilder_ == null) {
+                    if (constraintCase_ == 7) {
+                        return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
                 } else {
-                    if (constraintCase_ == 4) {
-                        return endpointLocationBuilder_.getMessage();
+                    if (constraintCase_ == 7) {
+                        return slaLatencyBuilder_.getMessage();
                     }
-                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
                 }
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
-                if (endpointLocationBuilder_ == null) {
+            public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+                if (slaLatencyBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
                     constraint_ = value;
                     onChanged();
                 } else {
-                    endpointLocationBuilder_.setMessage(value);
+                    slaLatencyBuilder_.setMessage(value);
                 }
-                constraintCase_ = 4;
+                constraintCase_ = 7;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation.Builder builderForValue) {
-                if (endpointLocationBuilder_ == null) {
+            public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
+                if (slaLatencyBuilder_ == null) {
                     constraint_ = builderForValue.build();
                     onChanged();
                 } else {
-                    endpointLocationBuilder_.setMessage(builderForValue.build());
+                    slaLatencyBuilder_.setMessage(builderForValue.build());
                 }
-                constraintCase_ = 4;
+                constraintCase_ = 7;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            public Builder mergeEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
-                if (endpointLocationBuilder_ == null) {
-                    if (constraintCase_ == 4 && constraint_ != context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.newBuilder((context.ContextOuterClass.Constraint_EndPointLocation) constraint_).mergeFrom(value).buildPartial();
+            public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+                if (slaLatencyBuilder_ == null) {
+                    if (constraintCase_ == 7 && constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).mergeFrom(value).buildPartial();
                     } else {
                         constraint_ = value;
                     }
                     onChanged();
                 } else {
-                    if (constraintCase_ == 4) {
-                        endpointLocationBuilder_.mergeFrom(value);
+                    if (constraintCase_ == 7) {
+                        slaLatencyBuilder_.mergeFrom(value);
+                    } else {
+                        slaLatencyBuilder_.setMessage(value);
                     }
-                    endpointLocationBuilder_.setMessage(value);
                 }
-                constraintCase_ = 4;
+                constraintCase_ = 7;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            public Builder clearEndpointLocation() {
-                if (endpointLocationBuilder_ == null) {
-                    if (constraintCase_ == 4) {
+            public Builder clearSlaLatency() {
+                if (slaLatencyBuilder_ == null) {
+                    if (constraintCase_ == 7) {
                         constraintCase_ = 0;
                         constraint_ = null;
                         onChanged();
                     }
                 } else {
-                    if (constraintCase_ == 4) {
+                    if (constraintCase_ == 7) {
                         constraintCase_ = 0;
                         constraint_ = null;
                     }
-                    endpointLocationBuilder_.clear();
+                    slaLatencyBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            public context.ContextOuterClass.Constraint_EndPointLocation.Builder getEndpointLocationBuilder() {
-                return getEndpointLocationFieldBuilder().getBuilder();
+            public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
+                return getSlaLatencyFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
-                if ((constraintCase_ == 4) && (endpointLocationBuilder_ != null)) {
-                    return endpointLocationBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+                if ((constraintCase_ == 7) && (slaLatencyBuilder_ != null)) {
+                    return slaLatencyBuilder_.getMessageOrBuilder();
                 } else {
-                    if (constraintCase_ == 4) {
-                        return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+                    if (constraintCase_ == 7) {
+                        return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
                 }
             }
 
             /**
-             * <code>.context.Constraint_EndPointLocation endpoint_location = 4;</code>
+             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> getEndpointLocationFieldBuilder() {
-                if (endpointLocationBuilder_ == null) {
-                    if (!(constraintCase_ == 4)) {
-                        constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> getSlaLatencyFieldBuilder() {
+                if (slaLatencyBuilder_ == null) {
+                    if (!(constraintCase_ == 7)) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
                     }
-                    endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder>((context.ContextOuterClass.Constraint_EndPointLocation) constraint_, getParentForChildren(), isClean());
+                    slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder>((context.ContextOuterClass.Constraint_SLA_Latency) constraint_, getParentForChildren(), isClean());
                     constraint_ = null;
                 }
-                constraintCase_ = 4;
+                constraintCase_ = 7;
                 onChanged();
-                ;
-                return endpointLocationBuilder_;
+                return slaLatencyBuilder_;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             * @return Whether the slaAvailability field is set.
+             */
+            @java.lang.Override
+            public boolean hasSlaAvailability() {
+                return constraintCase_ == 8;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             * @return The slaAvailability.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+                if (slaAvailabilityBuilder_ == null) {
+                    if (constraintCase_ == 8) {
+                        return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 8) {
+                        return slaAvailabilityBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+                if (slaAvailabilityBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    slaAvailabilityBuilder_.setMessage(value);
+                }
+                constraintCase_ = 8;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
+                if (slaAvailabilityBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    slaAvailabilityBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 8;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+                if (slaAvailabilityBuilder_ == null) {
+                    if (constraintCase_ == 8 && constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 8) {
+                        slaAvailabilityBuilder_.mergeFrom(value);
+                    } else {
+                        slaAvailabilityBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 8;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            public Builder clearSlaAvailability() {
+                if (slaAvailabilityBuilder_ == null) {
+                    if (constraintCase_ == 8) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 8) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    slaAvailabilityBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
+                return getSlaAvailabilityFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+                if ((constraintCase_ == 8) && (slaAvailabilityBuilder_ != null)) {
+                    return slaAvailabilityBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 8) {
+                        return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> getSlaAvailabilityFieldBuilder() {
+                if (slaAvailabilityBuilder_ == null) {
+                    if (!(constraintCase_ == 8)) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+                    }
+                    slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder>((context.ContextOuterClass.Constraint_SLA_Availability) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 8;
+                onChanged();
+                return slaAvailabilityBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * @return Whether the slaIsolation field is set.
+             */
+            @java.lang.Override
+            public boolean hasSlaIsolation() {
+                return constraintCase_ == 9;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * @return The slaIsolation.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+                if (slaIsolationBuilder_ == null) {
+                    if (constraintCase_ == 9) {
+                        return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                } else {
+                    if (constraintCase_ == 9) {
+                        return slaIsolationBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+                if (slaIsolationBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    constraint_ = value;
+                    onChanged();
+                } else {
+                    slaIsolationBuilder_.setMessage(value);
+                }
+                constraintCase_ = 9;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
+                if (slaIsolationBuilder_ == null) {
+                    constraint_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    slaIsolationBuilder_.setMessage(builderForValue.build());
+                }
+                constraintCase_ = 9;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+                if (slaIsolationBuilder_ == null) {
+                    if (constraintCase_ == 9 && constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).mergeFrom(value).buildPartial();
+                    } else {
+                        constraint_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (constraintCase_ == 9) {
+                        slaIsolationBuilder_.mergeFrom(value);
+                    } else {
+                        slaIsolationBuilder_.setMessage(value);
+                    }
+                }
+                constraintCase_ = 9;
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            public Builder clearSlaIsolation() {
+                if (slaIsolationBuilder_ == null) {
+                    if (constraintCase_ == 9) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (constraintCase_ == 9) {
+                        constraintCase_ = 0;
+                        constraint_ = null;
+                    }
+                    slaIsolationBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
+                return getSlaIsolationFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+                if ((constraintCase_ == 9) && (slaIsolationBuilder_ != null)) {
+                    return slaIsolationBuilder_.getMessageOrBuilder();
+                } else {
+                    if (constraintCase_ == 9) {
+                        return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+                    }
+                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> getSlaIsolationFieldBuilder() {
+                if (slaIsolationBuilder_ == null) {
+                    if (!(constraintCase_ == 9)) {
+                        constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                    }
+                    slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder>((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 9;
+                onChanged();
+                return slaIsolationBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> exclusionsBuilder_;
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-             * @return Whether the endpointPriority field is set.
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * @return Whether the exclusions field is set.
              */
             @java.lang.Override
-            public boolean hasEndpointPriority() {
-                return constraintCase_ == 5;
+            public boolean hasExclusions() {
+                return constraintCase_ == 10;
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
-             * @return The endpointPriority.
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * @return The exclusions.
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
-                if (endpointPriorityBuilder_ == null) {
-                    if (constraintCase_ == 5) {
-                        return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+            public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
+                if (exclusionsBuilder_ == null) {
+                    if (constraintCase_ == 10) {
+                        return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
                 } else {
-                    if (constraintCase_ == 5) {
-                        return endpointPriorityBuilder_.getMessage();
+                    if (constraintCase_ == 10) {
+                        return exclusionsBuilder_.getMessage();
                     }
-                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
                 }
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
-                if (endpointPriorityBuilder_ == null) {
+            public Builder setExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
+                if (exclusionsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
                     constraint_ = value;
                     onChanged();
                 } else {
-                    endpointPriorityBuilder_.setMessage(value);
+                    exclusionsBuilder_.setMessage(value);
                 }
-                constraintCase_ = 5;
+                constraintCase_ = 10;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
-                if (endpointPriorityBuilder_ == null) {
+            public Builder setExclusions(context.ContextOuterClass.Constraint_Exclusions.Builder builderForValue) {
+                if (exclusionsBuilder_ == null) {
                     constraint_ = builderForValue.build();
                     onChanged();
                 } else {
-                    endpointPriorityBuilder_.setMessage(builderForValue.build());
+                    exclusionsBuilder_.setMessage(builderForValue.build());
                 }
-                constraintCase_ = 5;
+                constraintCase_ = 10;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
-                if (endpointPriorityBuilder_ == null) {
-                    if (constraintCase_ == 5 && constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).mergeFrom(value).buildPartial();
+            public Builder mergeExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
+                if (exclusionsBuilder_ == null) {
+                    if (constraintCase_ == 10 && constraint_ != context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_Exclusions.newBuilder((context.ContextOuterClass.Constraint_Exclusions) constraint_).mergeFrom(value).buildPartial();
                     } else {
                         constraint_ = value;
                     }
                     onChanged();
                 } else {
-                    if (constraintCase_ == 5) {
-                        endpointPriorityBuilder_.mergeFrom(value);
+                    if (constraintCase_ == 10) {
+                        exclusionsBuilder_.mergeFrom(value);
+                    } else {
+                        exclusionsBuilder_.setMessage(value);
                     }
-                    endpointPriorityBuilder_.setMessage(value);
                 }
-                constraintCase_ = 5;
+                constraintCase_ = 10;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            public Builder clearEndpointPriority() {
-                if (endpointPriorityBuilder_ == null) {
-                    if (constraintCase_ == 5) {
+            public Builder clearExclusions() {
+                if (exclusionsBuilder_ == null) {
+                    if (constraintCase_ == 10) {
                         constraintCase_ = 0;
                         constraint_ = null;
                         onChanged();
                     }
                 } else {
-                    if (constraintCase_ == 5) {
+                    if (constraintCase_ == 10) {
                         constraintCase_ = 0;
                         constraint_ = null;
                     }
-                    endpointPriorityBuilder_.clear();
+                    exclusionsBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
-                return getEndpointPriorityFieldBuilder().getBuilder();
+            public context.ContextOuterClass.Constraint_Exclusions.Builder getExclusionsBuilder() {
+                return getExclusionsFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
-                if ((constraintCase_ == 5) && (endpointPriorityBuilder_ != null)) {
-                    return endpointPriorityBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
+                if ((constraintCase_ == 10) && (exclusionsBuilder_ != null)) {
+                    return exclusionsBuilder_.getMessageOrBuilder();
                 } else {
-                    if (constraintCase_ == 5) {
-                        return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+                    if (constraintCase_ == 10) {
+                        return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
                 }
             }
 
             /**
-             * <code>.context.Constraint_EndPointPriority endpoint_priority = 5;</code>
+             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> getEndpointPriorityFieldBuilder() {
-                if (endpointPriorityBuilder_ == null) {
-                    if (!(constraintCase_ == 5)) {
-                        constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> getExclusionsFieldBuilder() {
+                if (exclusionsBuilder_ == null) {
+                    if (!(constraintCase_ == 10)) {
+                        constraint_ = context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
                     }
-                    endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>((context.ContextOuterClass.Constraint_EndPointPriority) constraint_, getParentForChildren(), isClean());
+                    exclusionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder>((context.ContextOuterClass.Constraint_Exclusions) constraint_, getParentForChildren(), isClean());
                     constraint_ = null;
                 }
-                constraintCase_ = 5;
+                constraintCase_ = 10;
                 onChanged();
-                ;
-                return endpointPriorityBuilder_;
+                return exclusionsBuilder_;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder> qosProfileBuilder_;
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-             * @return Whether the slaCapacity field is set.
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             * @return Whether the qosProfile field is set.
              */
             @java.lang.Override
-            public boolean hasSlaCapacity() {
-                return constraintCase_ == 6;
+            public boolean hasQosProfile() {
+                return constraintCase_ == 11;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-             * @return The slaCapacity.
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             * @return The qosProfile.
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
-                if (slaCapacityBuilder_ == null) {
-                    if (constraintCase_ == 6) {
-                        return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+            public context.ContextOuterClass.Constraint_QoSProfile getQosProfile() {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11) {
+                        return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
                 } else {
-                    if (constraintCase_ == 6) {
-                        return slaCapacityBuilder_.getMessage();
+                    if (constraintCase_ == 11) {
+                        return qosProfileBuilder_.getMessage();
                     }
-                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
                 }
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
-            public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
-                if (slaCapacityBuilder_ == null) {
+            public Builder setQosProfile(context.ContextOuterClass.Constraint_QoSProfile value) {
+                if (qosProfileBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
                     constraint_ = value;
                     onChanged();
                 } else {
-                    slaCapacityBuilder_.setMessage(value);
+                    qosProfileBuilder_.setMessage(value);
                 }
-                constraintCase_ = 6;
+                constraintCase_ = 11;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
-            public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
-                if (slaCapacityBuilder_ == null) {
+            public Builder setQosProfile(context.ContextOuterClass.Constraint_QoSProfile.Builder builderForValue) {
+                if (qosProfileBuilder_ == null) {
                     constraint_ = builderForValue.build();
                     onChanged();
                 } else {
-                    slaCapacityBuilder_.setMessage(builderForValue.build());
+                    qosProfileBuilder_.setMessage(builderForValue.build());
                 }
-                constraintCase_ = 6;
+                constraintCase_ = 11;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
-            public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
-                if (slaCapacityBuilder_ == null) {
-                    if (constraintCase_ == 6 && constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).mergeFrom(value).buildPartial();
+            public Builder mergeQosProfile(context.ContextOuterClass.Constraint_QoSProfile value) {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11 && constraint_ != context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance()) {
+                        constraint_ = context.ContextOuterClass.Constraint_QoSProfile.newBuilder((context.ContextOuterClass.Constraint_QoSProfile) constraint_).mergeFrom(value).buildPartial();
                     } else {
                         constraint_ = value;
                     }
                     onChanged();
                 } else {
-                    if (constraintCase_ == 6) {
-                        slaCapacityBuilder_.mergeFrom(value);
+                    if (constraintCase_ == 11) {
+                        qosProfileBuilder_.mergeFrom(value);
+                    } else {
+                        qosProfileBuilder_.setMessage(value);
                     }
-                    slaCapacityBuilder_.setMessage(value);
                 }
-                constraintCase_ = 6;
+                constraintCase_ = 11;
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
-            public Builder clearSlaCapacity() {
-                if (slaCapacityBuilder_ == null) {
-                    if (constraintCase_ == 6) {
+            public Builder clearQosProfile() {
+                if (qosProfileBuilder_ == null) {
+                    if (constraintCase_ == 11) {
                         constraintCase_ = 0;
                         constraint_ = null;
                         onChanged();
                     }
                 } else {
-                    if (constraintCase_ == 6) {
+                    if (constraintCase_ == 11) {
                         constraintCase_ = 0;
                         constraint_ = null;
                     }
-                    slaCapacityBuilder_.clear();
+                    qosProfileBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
-            public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
-                return getSlaCapacityFieldBuilder().getBuilder();
+            public context.ContextOuterClass.Constraint_QoSProfile.Builder getQosProfileBuilder() {
+                return getQosProfileFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
              */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-                if ((constraintCase_ == 6) && (slaCapacityBuilder_ != null)) {
-                    return slaCapacityBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.Constraint_QoSProfileOrBuilder getQosProfileOrBuilder() {
+                if ((constraintCase_ == 11) && (qosProfileBuilder_ != null)) {
+                    return qosProfileBuilder_.getMessageOrBuilder();
                 } else {
-                    if (constraintCase_ == 6) {
-                        return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+                    if (constraintCase_ == 11) {
+                        return (context.ContextOuterClass.Constraint_QoSProfile) constraint_;
                     }
-                    return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+                    return context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                }
+            }
+
+            /**
+             * <code>.context.Constraint_QoSProfile qos_profile = 11;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder> getQosProfileFieldBuilder() {
+                if (qosProfileBuilder_ == null) {
+                    if (!(constraintCase_ == 11)) {
+                        constraint_ = context.ContextOuterClass.Constraint_QoSProfile.getDefaultInstance();
+                    }
+                    qosProfileBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_QoSProfile, context.ContextOuterClass.Constraint_QoSProfile.Builder, context.ContextOuterClass.Constraint_QoSProfileOrBuilder>((context.ContextOuterClass.Constraint_QoSProfile) constraint_, getParentForChildren(), isClean());
+                    constraint_ = null;
+                }
+                constraintCase_ = 11;
+                onChanged();
+                return qosProfileBuilder_;
+            }
+
+            @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 {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
                 }
+                return builder.buildPartial();
+            }
+        };
+
+        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 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();
+        }
+
+        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 contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+
+        public static final int IP_ADDRESS_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        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_ = 0;
+
+        /**
+         * <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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipAddress_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ipAddress_);
+            }
+            if (port_ != 0) {
+                output.writeUInt32(3, port_);
+            }
+            getUnknownFields().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 (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipAddress_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ipAddress_);
+            }
+            if (port_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeUInt32Size(3, port_);
+            }
+            size += getUnknownFields().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 (!getUnknownFields().equals(other.getUnknownFields()))
+                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) + getUnknownFields().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();
+        }
 
-            /**
-             * <code>.context.Constraint_SLA_Capacity sla_capacity = 6;</code>
-             */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> getSlaCapacityFieldBuilder() {
-                if (slaCapacityBuilder_ == null) {
-                    if (!(constraintCase_ == 6)) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
-                    }
-                    slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder>((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
-                }
-                constraintCase_ = 6;
-                onChanged();
-                ;
-                return slaCapacityBuilder_;
-            }
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
+        public static Builder newBuilder(context.ContextOuterClass.TeraFlowController prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             * @return Whether the slaLatency field is set.
-             */
-            @java.lang.Override
-            public boolean hasSlaLatency() {
-                return constraintCase_ == 7;
-            }
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             * @return The slaLatency.
-             */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
-                if (slaLatencyBuilder_ == null) {
-                    if (constraintCase_ == 7) {
-                        return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
-                } else {
-                    if (constraintCase_ == 7) {
-                        return slaLatencyBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
-                }
-            }
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
-                if (slaLatencyBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    constraint_ = value;
-                    onChanged();
-                } else {
-                    slaLatencyBuilder_.setMessage(value);
-                }
-                constraintCase_ = 7;
-                return this;
-            }
+        /**
+         * <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 {
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
-                if (slaLatencyBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
-                } else {
-                    slaLatencyBuilder_.setMessage(builderForValue.build());
-                }
-                constraintCase_ = 7;
-                return this;
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
-                if (slaLatencyBuilder_ == null) {
-                    if (constraintCase_ == 7 && constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).mergeFrom(value).buildPartial();
-                    } else {
-                        constraint_ = value;
-                    }
-                    onChanged();
-                } else {
-                    if (constraintCase_ == 7) {
-                        slaLatencyBuilder_.mergeFrom(value);
-                    }
-                    slaLatencyBuilder_.setMessage(value);
-                }
-                constraintCase_ = 7;
-                return this;
+            @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);
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            public Builder clearSlaLatency() {
-                if (slaLatencyBuilder_ == null) {
-                    if (constraintCase_ == 7) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 7) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    slaLatencyBuilder_.clear();
-                }
-                return this;
+            // Construct using context.ContextOuterClass.TeraFlowController.newBuilder()
+            private Builder() {
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
-                return getSlaLatencyFieldBuilder().getBuilder();
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-                if ((constraintCase_ == 7) && (slaLatencyBuilder_ != null)) {
-                    return slaLatencyBuilder_.getMessageOrBuilder();
-                } else {
-                    if (constraintCase_ == 7) {
-                        return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
+                    contextIdBuilder_ = null;
                 }
+                ipAddress_ = "";
+                port_ = 0;
+                return this;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Latency sla_latency = 7;</code>
-             */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> getSlaLatencyFieldBuilder() {
-                if (slaLatencyBuilder_ == null) {
-                    if (!(constraintCase_ == 7)) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
-                    }
-                    slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder>((context.ContextOuterClass.Constraint_SLA_Latency) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
-                }
-                constraintCase_ = 7;
-                onChanged();
-                ;
-                return slaLatencyBuilder_;
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
-
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             * @return Whether the slaAvailability field is set.
-             */
             @java.lang.Override
-            public boolean hasSlaAvailability() {
-                return constraintCase_ == 8;
+            public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+                return context.ContextOuterClass.TeraFlowController.getDefaultInstance();
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             * @return The slaAvailability.
-             */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
-                if (slaAvailabilityBuilder_ == null) {
-                    if (constraintCase_ == 8) {
-                        return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
-                } else {
-                    if (constraintCase_ == 8) {
-                        return slaAvailabilityBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+            public context.ContextOuterClass.TeraFlowController build() {
+                context.ContextOuterClass.TeraFlowController result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
                 }
+                return result;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
-                if (slaAvailabilityBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    constraint_ = value;
-                    onChanged();
-                } else {
-                    slaAvailabilityBuilder_.setMessage(value);
+            @java.lang.Override
+            public context.ContextOuterClass.TeraFlowController buildPartial() {
+                context.ContextOuterClass.TeraFlowController result = new context.ContextOuterClass.TeraFlowController(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                constraintCase_ = 8;
-                return this;
+                onBuilt();
+                return result;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
-                if (slaAvailabilityBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
-                } else {
-                    slaAvailabilityBuilder_.setMessage(builderForValue.build());
+            private void buildPartial0(context.ContextOuterClass.TeraFlowController result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.ipAddress_ = ipAddress_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.port_ = port_;
                 }
-                constraintCase_ = 8;
-                return this;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
-                if (slaAvailabilityBuilder_ == null) {
-                    if (constraintCase_ == 8 && constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).mergeFrom(value).buildPartial();
-                    } else {
-                        constraint_ = value;
-                    }
-                    onChanged();
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.TeraFlowController) {
+                    return mergeFrom((context.ContextOuterClass.TeraFlowController) other);
                 } else {
-                    if (constraintCase_ == 8) {
-                        slaAvailabilityBuilder_.mergeFrom(value);
-                    }
-                    slaAvailabilityBuilder_.setMessage(value);
+                    super.mergeFrom(other);
+                    return this;
                 }
-                constraintCase_ = 8;
-                return this;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            public Builder clearSlaAvailability() {
-                if (slaAvailabilityBuilder_ == null) {
-                    if (constraintCase_ == 8) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 8) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    slaAvailabilityBuilder_.clear();
+            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_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
                 }
+                if (other.getPort() != 0) {
+                    setPort(other.getPort());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
                 return this;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
-                return getSlaAvailabilityFieldBuilder().getBuilder();
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
             }
 
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
             @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-                if ((constraintCase_ == 8) && (slaAvailabilityBuilder_ != null)) {
-                    return slaAvailabilityBuilder_.getMessageOrBuilder();
-                } else {
-                    if (constraintCase_ == 8) {
-                        return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
                 }
-            }
-
-            /**
-             * <code>.context.Constraint_SLA_Availability sla_availability = 8;</code>
-             */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> getSlaAvailabilityFieldBuilder() {
-                if (slaAvailabilityBuilder_ == null) {
-                    if (!(constraintCase_ == 8)) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    ipAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    port_ = input.readUInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
                     }
-                    slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder>((context.ContextOuterClass.Constraint_SLA_Availability) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
                 }
-                constraintCase_ = 8;
-                onChanged();
-                ;
-                return slaAvailabilityBuilder_;
+                // finally
+                return this;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
+            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.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-             * @return Whether the slaIsolation field is set.
+             * <code>.context.ContextId context_id = 1;</code>
+             * @return Whether the contextId field is set.
              */
-            @java.lang.Override
-            public boolean hasSlaIsolation() {
-                return constraintCase_ == 9;
+            public boolean hasContextId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
-             * @return The slaIsolation.
+             * <code>.context.ContextId context_id = 1;</code>
+             * @return The contextId.
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
-                if (slaIsolationBuilder_ == null) {
-                    if (constraintCase_ == 9) {
-                        return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+            public context.ContextOuterClass.ContextId getContextId() {
+                if (contextIdBuilder_ == null) {
+                    return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
                 } else {
-                    if (constraintCase_ == 9) {
-                        return slaIsolationBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                    return contextIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
-                if (slaIsolationBuilder_ == null) {
+            public Builder setContextId(context.ContextOuterClass.ContextId value) {
+                if (contextIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    constraint_ = value;
-                    onChanged();
+                    contextId_ = value;
                 } else {
-                    slaIsolationBuilder_.setMessage(value);
+                    contextIdBuilder_.setMessage(value);
                 }
-                constraintCase_ = 9;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
-                if (slaIsolationBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
+            public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
+                if (contextIdBuilder_ == null) {
+                    contextId_ = builderForValue.build();
                 } else {
-                    slaIsolationBuilder_.setMessage(builderForValue.build());
+                    contextIdBuilder_.setMessage(builderForValue.build());
                 }
-                constraintCase_ = 9;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
-                if (slaIsolationBuilder_ == null) {
-                    if (constraintCase_ == 9 && constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).mergeFrom(value).buildPartial();
+            public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+                if (contextIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
-                        constraint_ = value;
+                        contextId_ = value;
                     }
-                    onChanged();
                 } else {
-                    if (constraintCase_ == 9) {
-                        slaIsolationBuilder_.mergeFrom(value);
-                    }
-                    slaIsolationBuilder_.setMessage(value);
+                    contextIdBuilder_.mergeFrom(value);
                 }
-                constraintCase_ = 9;
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            public Builder clearSlaIsolation() {
-                if (slaIsolationBuilder_ == null) {
-                    if (constraintCase_ == 9) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 9) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    slaIsolationBuilder_.clear();
+            public Builder clearContextId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
+                    contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
-                return getSlaIsolationFieldBuilder().getBuilder();
+            public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getContextIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-                if ((constraintCase_ == 9) && (slaIsolationBuilder_ != null)) {
-                    return slaIsolationBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+                if (contextIdBuilder_ != null) {
+                    return contextIdBuilder_.getMessageOrBuilder();
                 } else {
-                    if (constraintCase_ == 9) {
-                        return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+                    return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
                 }
             }
 
             /**
-             * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 9;</code>
+             * <code>.context.ContextId context_id = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> getSlaIsolationFieldBuilder() {
-                if (slaIsolationBuilder_ == null) {
-                    if (!(constraintCase_ == 9)) {
-                        constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
-                    }
-                    slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder>((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
+            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;
                 }
-                constraintCase_ = 9;
-                onChanged();
-                ;
-                return slaIsolationBuilder_;
+                return contextIdBuilder_;
             }
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> exclusionsBuilder_;
-
-            /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-             * @return Whether the exclusions field is set.
-             */
-            @java.lang.Override
-            public boolean hasExclusions() {
-                return constraintCase_ == 10;
-            }
+            private java.lang.Object ipAddress_ = "";
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
-             * @return The exclusions.
+             * <code>string ip_address = 2;</code>
+             * @return The ipAddress.
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
-                if (exclusionsBuilder_ == null) {
-                    if (constraintCase_ == 10) {
-                        return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
-                } else {
-                    if (constraintCase_ == 10) {
-                        return exclusionsBuilder_.getMessage();
-                    }
-                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+            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>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>string ip_address = 2;</code>
+             * @return The bytes for ipAddress.
              */
-            public Builder setExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
-                if (exclusionsBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    constraint_ = value;
-                    onChanged();
+            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 {
-                    exclusionsBuilder_.setMessage(value);
+                    return (com.google.protobuf.ByteString) ref;
                 }
-                constraintCase_ = 10;
-                return this;
             }
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>string ip_address = 2;</code>
+             * @param value The ipAddress to set.
+             * @return This builder for chaining.
              */
-            public Builder setExclusions(context.ContextOuterClass.Constraint_Exclusions.Builder builderForValue) {
-                if (exclusionsBuilder_ == null) {
-                    constraint_ = builderForValue.build();
-                    onChanged();
-                } else {
-                    exclusionsBuilder_.setMessage(builderForValue.build());
+            public Builder setIpAddress(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
                 }
-                constraintCase_ = 10;
+                ipAddress_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>string ip_address = 2;</code>
+             * @return This builder for chaining.
              */
-            public Builder mergeExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
-                if (exclusionsBuilder_ == null) {
-                    if (constraintCase_ == 10 && constraint_ != context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance()) {
-                        constraint_ = context.ContextOuterClass.Constraint_Exclusions.newBuilder((context.ContextOuterClass.Constraint_Exclusions) constraint_).mergeFrom(value).buildPartial();
-                    } else {
-                        constraint_ = value;
-                    }
-                    onChanged();
-                } else {
-                    if (constraintCase_ == 10) {
-                        exclusionsBuilder_.mergeFrom(value);
-                    }
-                    exclusionsBuilder_.setMessage(value);
-                }
-                constraintCase_ = 10;
+            public Builder clearIpAddress() {
+                ipAddress_ = getDefaultInstance().getIpAddress();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>string ip_address = 2;</code>
+             * @param value The bytes for ipAddress to set.
+             * @return This builder for chaining.
              */
-            public Builder clearExclusions() {
-                if (exclusionsBuilder_ == null) {
-                    if (constraintCase_ == 10) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                        onChanged();
-                    }
-                } else {
-                    if (constraintCase_ == 10) {
-                        constraintCase_ = 0;
-                        constraint_ = null;
-                    }
-                    exclusionsBuilder_.clear();
+            public Builder setIpAddressBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
                 }
+                checkByteStringIsUtf8(value);
+                ipAddress_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
+            private int port_;
+
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>uint32 port = 3;</code>
+             * @return The port.
              */
-            public context.ContextOuterClass.Constraint_Exclusions.Builder getExclusionsBuilder() {
-                return getExclusionsFieldBuilder().getBuilder();
+            @java.lang.Override
+            public int getPort() {
+                return port_;
             }
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>uint32 port = 3;</code>
+             * @param value The port to set.
+             * @return This builder for chaining.
              */
-            @java.lang.Override
-            public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
-                if ((constraintCase_ == 10) && (exclusionsBuilder_ != null)) {
-                    return exclusionsBuilder_.getMessageOrBuilder();
-                } else {
-                    if (constraintCase_ == 10) {
-                        return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
-                    }
-                    return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
-                }
+            public Builder setPort(int value) {
+                port_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>.context.Constraint_Exclusions exclusions = 10;</code>
+             * <code>uint32 port = 3;</code>
+             * @return This builder for chaining.
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> getExclusionsFieldBuilder() {
-                if (exclusionsBuilder_ == null) {
-                    if (!(constraintCase_ == 10)) {
-                        constraint_ = context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
-                    }
-                    exclusionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder>((context.ContextOuterClass.Constraint_Exclusions) constraint_, getParentForChildren(), isClean());
-                    constraint_ = null;
-                }
-                constraintCase_ = 10;
+            public Builder clearPort() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                port_ = 0;
                 onChanged();
-                ;
-                return exclusionsBuilder_;
+                return this;
             }
 
             @java.lang.Override
@@ -70638,44 +71556,54 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.Constraint)
+            // @@protoc_insertion_point(builder_scope:context.TeraFlowController)
         }
 
-        // @@protoc_insertion_point(class_scope:context.Constraint)
-        private static final context.ContextOuterClass.Constraint DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.TeraFlowController)
+        private static final context.ContextOuterClass.TeraFlowController DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.TeraFlowController();
         }
 
-        public static context.ContextOuterClass.Constraint getDefaultInstance() {
+        public static context.ContextOuterClass.TeraFlowController getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<Constraint> PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+        private static final com.google.protobuf.Parser<TeraFlowController> PARSER = new com.google.protobuf.AbstractParser<TeraFlowController>() {
 
             @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 TeraFlowController parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<Constraint> parser() {
+        public static com.google.protobuf.Parser<TeraFlowController> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<Constraint> getParserForType() {
+        public com.google.protobuf.Parser<TeraFlowController> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+        public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface TeraFlowControllerOrBuilder extends // @@protoc_insertion_point(interface_extends:context.TeraFlowController)
+    public interface AuthenticationResultOrBuilder extends // @@protoc_insertion_point(interface_extends:context.AuthenticationResult)
     com.google.protobuf.MessageOrBuilder {
 
         /**
@@ -70696,120 +71624,41 @@ public final class ContextOuterClass {
         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.
+         * <code>bool authenticated = 2;</code>
+         * @return The authenticated.
          */
-        int getPort();
+        boolean getAuthenticated();
     }
 
     /**
-     * <pre>
-     * ----- Miscellaneous -------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.TeraFlowController}
+     * Protobuf type {@code context.AuthenticationResult}
      */
-    public static final class TeraFlowController extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.TeraFlowController)
-    TeraFlowControllerOrBuilder {
+    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 TeraFlowController.newBuilder() to construct.
-        private TeraFlowController(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use AuthenticationResult.newBuilder() to construct.
+        private AuthenticationResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private TeraFlowController() {
-            ipAddress_ = "";
+        private AuthenticationResult() {
         }
 
         @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();
-            }
+            return new AuthenticationResult();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+            return context.ContextOuterClass.internal_static_context_AuthenticationResult_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);
+            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;
@@ -70839,57 +71688,20 @@ public final class ContextOuterClass {
          */
         @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;
-            }
+            return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
 
-        public static final int PORT_FIELD_NUMBER = 3;
+        public static final int AUTHENTICATED_FIELD_NUMBER = 2;
 
-        private int port_;
+        private boolean authenticated_ = false;
 
         /**
-         * <code>uint32 port = 3;</code>
-         * @return The port.
+         * <code>bool authenticated = 2;</code>
+         * @return The authenticated.
          */
         @java.lang.Override
-        public int getPort() {
-            return port_;
+        public boolean getAuthenticated() {
+            return authenticated_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -70910,13 +71722,10 @@ public final class ContextOuterClass {
             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_);
+            if (authenticated_ != false) {
+                output.writeBool(2, authenticated_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -70928,13 +71737,10 @@ public final class ContextOuterClass {
             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_);
+            if (authenticated_ != false) {
+                size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, authenticated_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -70944,21 +71750,19 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.TeraFlowController)) {
+            if (!(obj instanceof context.ContextOuterClass.AuthenticationResult)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.TeraFlowController other = (context.ContextOuterClass.TeraFlowController) 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 (!getIpAddress().equals(other.getIpAddress()))
-                return false;
-            if (getPort() != other.getPort())
+            if (getAuthenticated() != other.getAuthenticated())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -70974,60 +71778,58 @@ public final class ContextOuterClass {
                 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();
+            hash = (37 * hash) + AUTHENTICATED_FIELD_NUMBER;
+            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getAuthenticated());
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.TeraFlowController parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.AuthenticationResult 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 {
+        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.TeraFlowController parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.AuthenticationResult 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 {
+        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.TeraFlowController parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.AuthenticationResult 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 {
+        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.TeraFlowController parseFrom(java.io.InputStream input) throws java.io.IOException {
+        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.TeraFlowController parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        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.TeraFlowController parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        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.TeraFlowController parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        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.TeraFlowController parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        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.TeraFlowController parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        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);
         }
 
@@ -71040,7 +71842,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.TeraFlowController prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.AuthenticationResult prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -71056,66 +71858,54 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <pre>
-         * ----- Miscellaneous -------------------------------------------------------------------------------------------------
-         * </pre>
-         *
-         * Protobuf type {@code context.TeraFlowController}
+         * Protobuf type {@code context.AuthenticationResult}
          */
-        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 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_TeraFlowController_descriptor;
+                return context.ContextOuterClass.internal_static_context_AuthenticationResult_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);
+                return context.ContextOuterClass.internal_static_context_AuthenticationResult_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.AuthenticationResult.class, context.ContextOuterClass.AuthenticationResult.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.TeraFlowController.newBuilder()
+            // 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;
+                bitField0_ = 0;
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
-                ipAddress_ = "";
-                port_ = 0;
+                authenticated_ = false;
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+                return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
-                return context.ContextOuterClass.TeraFlowController.getDefaultInstance();
+            public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+                return context.ContextOuterClass.AuthenticationResult.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.TeraFlowController build() {
-                context.ContextOuterClass.TeraFlowController result = buildPartial();
+            public context.ContextOuterClass.AuthenticationResult build() {
+                context.ContextOuterClass.AuthenticationResult result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -71123,73 +71913,45 @@ public final class ContextOuterClass {
             }
 
             @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();
+            public context.ContextOuterClass.AuthenticationResult buildPartial() {
+                context.ContextOuterClass.AuthenticationResult result = new context.ContextOuterClass.AuthenticationResult(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                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);
+            private void buildPartial0(context.ContextOuterClass.AuthenticationResult result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.contextId_ = contextIdBuilder_ == null ? contextId_ : contextIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.authenticated_ = authenticated_;
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.TeraFlowController) {
-                    return mergeFrom((context.ContextOuterClass.TeraFlowController) other);
+                if (other instanceof context.ContextOuterClass.AuthenticationResult) {
+                    return mergeFrom((context.ContextOuterClass.AuthenticationResult) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.TeraFlowController other) {
-                if (other == context.ContextOuterClass.TeraFlowController.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.AuthenticationResult other) {
+                if (other == context.ContextOuterClass.AuthenticationResult.getDefaultInstance())
                     return this;
                 if (other.hasContextId()) {
                     mergeContextId(other.getContextId());
                 }
-                if (!other.getIpAddress().isEmpty()) {
-                    ipAddress_ = other.ipAddress_;
-                    onChanged();
-                }
-                if (other.getPort() != 0) {
-                    setPort(other.getPort());
+                if (other.getAuthenticated() != false) {
+                    setAuthenticated(other.getAuthenticated());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -71201,20 +71963,54 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getContextIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    authenticated_ = input.readBool();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.TeraFlowController) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 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_;
@@ -71224,7 +72020,7 @@ public final class ContextOuterClass {
              * @return Whether the contextId field is set.
              */
             public boolean hasContextId() {
-                return contextIdBuilder_ != null || contextId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -71248,10 +72044,11 @@ public final class ContextOuterClass {
                         throw new NullPointerException();
                     }
                     contextId_ = value;
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -71261,10 +72058,11 @@ public final class ContextOuterClass {
             public Builder setContextId(context.ContextOuterClass.ContextId.Builder builderForValue) {
                 if (contextIdBuilder_ == null) {
                     contextId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     contextIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -71273,15 +72071,16 @@ public final class ContextOuterClass {
              */
             public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
                 if (contextIdBuilder_ == null) {
-                    if (contextId_ != null) {
-                        contextId_ = context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && contextId_ != null && contextId_ != context.ContextOuterClass.ContextId.getDefaultInstance()) {
+                        getContextIdBuilder().mergeFrom(value);
                     } else {
                         contextId_ = value;
                     }
-                    onChanged();
                 } else {
                     contextIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -71289,13 +72088,13 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
-                } else {
-                    contextId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                contextId_ = null;
+                if (contextIdBuilder_ != null) {
+                    contextIdBuilder_.dispose();
                     contextIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -71303,6 +72102,7 @@ public final class ContextOuterClass {
              * <code>.context.ContextId context_id = 1;</code>
              */
             public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getContextIdFieldBuilder().getBuilder();
             }
@@ -71329,106 +72129,36 @@ public final class ContextOuterClass {
                 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_;
+            private boolean authenticated_;
 
             /**
-             * <code>uint32 port = 3;</code>
-             * @return The port.
+             * <code>bool authenticated = 2;</code>
+             * @return The authenticated.
              */
             @java.lang.Override
-            public int getPort() {
-                return port_;
+            public boolean getAuthenticated() {
+                return authenticated_;
             }
 
             /**
-             * <code>uint32 port = 3;</code>
-             * @param value The port to set.
+             * <code>bool authenticated = 2;</code>
+             * @param value The authenticated to set.
              * @return This builder for chaining.
              */
-            public Builder setPort(int value) {
-                port_ = value;
+            public Builder setAuthenticated(boolean value) {
+                authenticated_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>uint32 port = 3;</code>
+             * <code>bool authenticated = 2;</code>
              * @return This builder for chaining.
              */
-            public Builder clearPort() {
-                port_ = 0;
+            public Builder clearAuthenticated() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                authenticated_ = false;
                 onChanged();
                 return this;
             }
@@ -71442,198 +72172,141 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.TeraFlowController)
+            // @@protoc_insertion_point(builder_scope:context.AuthenticationResult)
         }
 
-        // @@protoc_insertion_point(class_scope:context.TeraFlowController)
-        private static final context.ContextOuterClass.TeraFlowController DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.AuthenticationResult)
+        private static final context.ContextOuterClass.AuthenticationResult DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.TeraFlowController();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.AuthenticationResult();
         }
 
-        public static context.ContextOuterClass.TeraFlowController getDefaultInstance() {
+        public static context.ContextOuterClass.AuthenticationResult getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<TeraFlowController> PARSER = new com.google.protobuf.AbstractParser<TeraFlowController>() {
+        private static final com.google.protobuf.Parser<AuthenticationResult> PARSER = new com.google.protobuf.AbstractParser<AuthenticationResult>() {
 
             @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 AuthenticationResult parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<TeraFlowController> parser() {
+        public static com.google.protobuf.Parser<AuthenticationResult> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<TeraFlowController> getParserForType() {
+        public com.google.protobuf.Parser<AuthenticationResult> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+        public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface AuthenticationResultOrBuilder extends // @@protoc_insertion_point(interface_extends:context.AuthenticationResult)
+    public interface OpticalConfigIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigId)
     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>
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
          */
-        context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+        java.lang.String getOpticalconfigUuid();
 
         /**
-         * <code>bool authenticated = 2;</code>
-         * @return The authenticated.
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
          */
-        boolean getAuthenticated();
+        com.google.protobuf.ByteString getOpticalconfigUuidBytes();
     }
 
     /**
-     * Protobuf type {@code context.AuthenticationResult}
+     * <pre>
+     * ---------------- Experimental ------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.OpticalConfigId}
      */
-    public static final class AuthenticationResult extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.AuthenticationResult)
-    AuthenticationResultOrBuilder {
+    public static final class OpticalConfigId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigId)
+    OpticalConfigIdOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use AuthenticationResult.newBuilder() to construct.
-        private AuthenticationResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfigId.newBuilder() to construct.
+        private OpticalConfigId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private AuthenticationResult() {
+        private OpticalConfigId() {
+            opticalconfigUuid_ = "";
         }
 
         @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();
-            }
+            return new OpticalConfigId();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_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);
+            return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.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;
-        }
+        public static final int OPTICALCONFIG_UUID_FIELD_NUMBER = 1;
 
-        /**
-         * <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_;
-        }
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object opticalconfigUuid_ = "";
 
         /**
-         * <code>.context.ContextId context_id = 1;</code>
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The opticalconfigUuid.
          */
         @java.lang.Override
-        public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-            return getContextId();
+        public java.lang.String getOpticalconfigUuid() {
+            java.lang.Object ref = opticalconfigUuid_;
+            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();
+                opticalconfigUuid_ = s;
+                return s;
+            }
         }
 
-        public static final int AUTHENTICATED_FIELD_NUMBER = 2;
-
-        private boolean authenticated_;
-
         /**
-         * <code>bool authenticated = 2;</code>
-         * @return The authenticated.
+         * <code>string opticalconfig_uuid = 1;</code>
+         * @return The bytes for opticalconfigUuid.
          */
         @java.lang.Override
-        public boolean getAuthenticated() {
-            return authenticated_;
+        public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+            java.lang.Object ref = opticalconfigUuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                opticalconfigUuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
         }
 
         private byte memoizedIsInitialized = -1;
@@ -71651,13 +72324,10 @@ public final class ContextOuterClass {
 
         @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_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, opticalconfigUuid_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -71666,13 +72336,10 @@ public final class ContextOuterClass {
             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_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(opticalconfigUuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, opticalconfigUuid_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -71682,19 +72349,13 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.AuthenticationResult)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigId)) {
                 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())
+            context.ContextOuterClass.OpticalConfigId other = (context.ContextOuterClass.OpticalConfigId) obj;
+            if (!getOpticalconfigUuid().equals(other.getOpticalconfigUuid()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -71706,62 +72367,58 @@ public final class ContextOuterClass {
             }
             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();
+            hash = (37 * hash) + OPTICALCONFIG_UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getOpticalconfigUuid().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.AuthenticationResult parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId 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 {
+        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -71774,7 +72431,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.AuthenticationResult prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigId prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -71790,61 +72447,53 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.AuthenticationResult}
+         * <pre>
+         * ---------------- Experimental ------------------------
+         * </pre>
+         *
+         * Protobuf type {@code context.OpticalConfigId}
          */
-        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 class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigId)
+        context.ContextOuterClass.OpticalConfigIdOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_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);
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.AuthenticationResult.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfigId.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;
+                bitField0_ = 0;
+                opticalconfigUuid_ = "";
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
-                return context.ContextOuterClass.AuthenticationResult.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigId.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.AuthenticationResult build() {
-                context.ContextOuterClass.AuthenticationResult result = buildPartial();
+            public context.ContextOuterClass.OpticalConfigId build() {
+                context.ContextOuterClass.OpticalConfigId result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -71852,68 +72501,41 @@ public final class ContextOuterClass {
             }
 
             @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();
+            public context.ContextOuterClass.OpticalConfigId buildPartial() {
+                context.ContextOuterClass.OpticalConfigId result = new context.ContextOuterClass.OpticalConfigId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                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);
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalconfigUuid_ = opticalconfigUuid_;
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.AuthenticationResult) {
-                    return mergeFrom((context.ContextOuterClass.AuthenticationResult) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfigId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigId) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.AuthenticationResult other) {
-                if (other == context.ContextOuterClass.AuthenticationResult.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigId other) {
+                if (other == context.ContextOuterClass.OpticalConfigId.getDefaultInstance())
                     return this;
-                if (other.hasContextId()) {
-                    mergeContextId(other.getContextId());
-                }
-                if (other.getAuthenticated() != false) {
-                    setAuthenticated(other.getAuthenticated());
+                if (!other.getOpticalconfigUuid().isEmpty()) {
+                    opticalconfigUuid_ = other.opticalconfigUuid_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -71925,162 +72547,118 @@ public final class ContextOuterClass {
 
             @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;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    opticalconfigUuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } 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);
                 }
+                // finally
                 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;
-            }
+            private int bitField0_;
 
-            /**
-             * <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;
-            }
+            private java.lang.Object opticalconfigUuid_ = "";
 
             /**
-             * <code>.context.ContextId context_id = 1;</code>
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The opticalconfigUuid.
              */
-            public Builder clearContextId() {
-                if (contextIdBuilder_ == null) {
-                    contextId_ = null;
-                    onChanged();
+            public java.lang.String getOpticalconfigUuid() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    opticalconfigUuid_ = s;
+                    return s;
                 } else {
-                    contextId_ = null;
-                    contextIdBuilder_ = null;
+                    return (java.lang.String) ref;
                 }
-                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>
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @return The bytes for opticalconfigUuid.
              */
-            public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-                if (contextIdBuilder_ != null) {
-                    return contextIdBuilder_.getMessageOrBuilder();
+            public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
+                java.lang.Object ref = opticalconfigUuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    opticalconfigUuid_ = b;
+                    return b;
                 } else {
-                    return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+                    return (com.google.protobuf.ByteString) ref;
                 }
             }
 
             /**
-             * <code>.context.ContextId context_id = 1;</code>
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The opticalconfigUuid to set.
+             * @return This builder for chaining.
              */
-            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;
+            public Builder setOpticalconfigUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
                 }
-                return contextIdBuilder_;
-            }
-
-            private boolean authenticated_;
-
-            /**
-             * <code>bool authenticated = 2;</code>
-             * @return The authenticated.
-             */
-            @java.lang.Override
-            public boolean getAuthenticated() {
-                return authenticated_;
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>bool authenticated = 2;</code>
-             * @param value The authenticated to set.
+             * <code>string opticalconfig_uuid = 1;</code>
              * @return This builder for chaining.
              */
-            public Builder setAuthenticated(boolean value) {
-                authenticated_ = value;
+            public Builder clearOpticalconfigUuid() {
+                opticalconfigUuid_ = getDefaultInstance().getOpticalconfigUuid();
+                bitField0_ = (bitField0_ & ~0x00000001);
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>bool authenticated = 2;</code>
+             * <code>string opticalconfig_uuid = 1;</code>
+             * @param value The bytes for opticalconfigUuid to set.
              * @return This builder for chaining.
              */
-            public Builder clearAuthenticated() {
-                authenticated_ = false;
+            public Builder setOpticalconfigUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                opticalconfigUuid_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -72094,176 +72672,233 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.AuthenticationResult)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigId)
         }
 
-        // @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-        private static final context.ContextOuterClass.AuthenticationResult DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigId)
+        private static final context.ContextOuterClass.OpticalConfigId DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.AuthenticationResult();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigId();
         }
 
-        public static context.ContextOuterClass.AuthenticationResult getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigId getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<AuthenticationResult> PARSER = new com.google.protobuf.AbstractParser<AuthenticationResult>() {
+        private static final com.google.protobuf.Parser<OpticalConfigId> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigId>() {
 
             @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 OpticalConfigId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<AuthenticationResult> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigId> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<AuthenticationResult> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigId> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigId)
+    public interface OpticalConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfig)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The opticalconfigUuid.
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
          */
-        java.lang.String getOpticalconfigUuid();
+        boolean hasOpticalconfigId();
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The bytes for opticalconfigUuid.
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
          */
-        com.google.protobuf.ByteString getOpticalconfigUuidBytes();
-    }
+        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
 
-    /**
-     * <pre>
-     * ---------------- Experimental ------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.OpticalConfigId}
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
+        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
+
+        /**
+         * <code>string config = 2;</code>
+         * @return The config.
+         */
+        java.lang.String getConfig();
+
+        /**
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
+         */
+        com.google.protobuf.ByteString getConfigBytes();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return Whether the deviceId field is set.
+         */
+        boolean hasDeviceId();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return The deviceId.
+         */
+        context.ContextOuterClass.DeviceId getDeviceId();
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         */
+        context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.OpticalConfig}
      */
-    public static final class OpticalConfigId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigId)
-    OpticalConfigIdOrBuilder {
+    public static final class OpticalConfig extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfig)
+    OpticalConfigOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfigId.newBuilder() to construct.
-        private OpticalConfigId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfig.newBuilder() to construct.
+        private OpticalConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfigId() {
-            opticalconfigUuid_ = "";
+        private OpticalConfig() {
+            config_ = "";
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfigId();
+            return new OpticalConfig();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
         }
 
         @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
         }
 
-        private OpticalConfigId(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();
-                                opticalconfigUuid_ = 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 int OPTICALCONFIG_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return Whether the opticalconfigId field is set.
+         */
+        @java.lang.Override
+        public boolean hasOpticalconfigId() {
+            return opticalconfigId_ != null;
         }
 
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * @return The opticalconfigId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
         }
 
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         */
         @java.lang.Override
-        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
         }
 
-        public static final int OPTICALCONFIG_UUID_FIELD_NUMBER = 1;
+        public static final int CONFIG_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object opticalconfigUuid_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object config_ = "";
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The opticalconfigUuid.
+         * <code>string config = 2;</code>
+         * @return The config.
          */
         @java.lang.Override
-        public java.lang.String getOpticalconfigUuid() {
-            java.lang.Object ref = opticalconfigUuid_;
+        public java.lang.String getConfig() {
+            java.lang.Object ref = config_;
             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();
-                opticalconfigUuid_ = s;
+                config_ = s;
                 return s;
             }
         }
 
         /**
-         * <code>string opticalconfig_uuid = 1;</code>
-         * @return The bytes for opticalconfigUuid.
+         * <code>string config = 2;</code>
+         * @return The bytes for config.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
-            java.lang.Object ref = opticalconfigUuid_;
+        public com.google.protobuf.ByteString getConfigBytes() {
+            java.lang.Object ref = config_;
             if (ref instanceof java.lang.String) {
                 com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                opticalconfigUuid_ = b;
+                config_ = b;
                 return b;
             } else {
                 return (com.google.protobuf.ByteString) ref;
             }
         }
 
+        public static final int DEVICE_ID_FIELD_NUMBER = 3;
+
+        private context.ContextOuterClass.DeviceId deviceId_;
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</code>
+         * @return Whether the deviceId field is set.
+         */
+        @java.lang.Override
+        public boolean hasDeviceId() {
+            return deviceId_ != null;
+        }
+
+        /**
+         * <code>.context.DeviceId device_id = 3;</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 = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -72279,10 +72914,16 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getOpticalconfigUuidBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, opticalconfigUuid_);
+            if (opticalconfigId_ != null) {
+                output.writeMessage(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_);
+            }
+            if (deviceId_ != null) {
+                output.writeMessage(3, getDeviceId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -72291,10 +72932,16 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getOpticalconfigUuidBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, opticalconfigUuid_);
+            if (opticalconfigId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalconfigId());
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(config_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_);
+            }
+            if (deviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getDeviceId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -72304,13 +72951,25 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfigId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfig)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfigId other = (context.ContextOuterClass.OpticalConfigId) obj;
-            if (!getOpticalconfigUuid().equals(other.getOpticalconfigUuid()))
+            context.ContextOuterClass.OpticalConfig other = (context.ContextOuterClass.OpticalConfig) obj;
+            if (hasOpticalconfigId() != other.hasOpticalconfigId())
+                return false;
+            if (hasOpticalconfigId()) {
+                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
+                    return false;
+            }
+            if (!getConfig().equals(other.getConfig()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (hasDeviceId() != other.hasDeviceId())
+                return false;
+            if (hasDeviceId()) {
+                if (!getDeviceId().equals(other.getDeviceId()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -72322,58 +72981,66 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + OPTICALCONFIG_UUID_FIELD_NUMBER;
-            hash = (53 * hash) + getOpticalconfigUuid().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            if (hasOpticalconfigId()) {
+                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigId().hashCode();
+            }
+            hash = (37 * hash) + CONFIG_FIELD_NUMBER;
+            hash = (53 * hash) + getConfig().hashCode();
+            if (hasDeviceId()) {
+                hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getDeviceId().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig 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.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -72386,7 +73053,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfig prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -72402,59 +73069,59 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <pre>
-         * ---------------- Experimental ------------------------
-         * </pre>
-         *
-         * Protobuf type {@code context.OpticalConfigId}
+         * Protobuf type {@code context.OpticalConfig}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigId)
-        context.ContextOuterClass.OpticalConfigIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfig)
+        context.ContextOuterClass.OpticalConfigOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigId.class, context.ContextOuterClass.OpticalConfigId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfigId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfig.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();
-                opticalconfigUuid_ = "";
+                bitField0_ = 0;
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                config_ = "";
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfigId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfig.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId build() {
-                context.ContextOuterClass.OpticalConfigId result = buildPartial();
+            public context.ContextOuterClass.OpticalConfig build() {
+                context.ContextOuterClass.OpticalConfig result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -72462,61 +73129,53 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigId buildPartial() {
-                context.ContextOuterClass.OpticalConfigId result = new context.ContextOuterClass.OpticalConfigId(this);
-                result.opticalconfigUuid_ = opticalconfigUuid_;
+            public context.ContextOuterClass.OpticalConfig buildPartial() {
+                context.ContextOuterClass.OpticalConfig result = new context.ContextOuterClass.OpticalConfig(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
                 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);
+            private void buildPartial0(context.ContextOuterClass.OpticalConfig result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.config_ = config_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfigId) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfigId) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfig) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfig) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigId other) {
-                if (other == context.ContextOuterClass.OpticalConfigId.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfig other) {
+                if (other == context.ContextOuterClass.OpticalConfig.getDefaultInstance())
                     return this;
-                if (!other.getOpticalconfigUuid().isEmpty()) {
-                    opticalconfigUuid_ = other.opticalconfigUuid_;
+                if (other.hasOpticalconfigId()) {
+                    mergeOpticalconfigId(other.getOpticalconfigId());
+                }
+                if (!other.getConfig().isEmpty()) {
+                    config_ = other.config_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                if (other.hasDeviceId()) {
+                    mergeDeviceId(other.getDeviceId());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -72528,32 +73187,191 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalConfigId parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    config_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalConfigId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return Whether the opticalconfigId field is set.
+             */
+            public boolean hasOpticalconfigId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * @return The opticalconfigId.
+             */
+            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+                if (opticalconfigIdBuilder_ == null) {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                } else {
+                    return opticalconfigIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
                     }
+                    opticalconfigId_ = value;
+                } else {
+                    opticalconfigIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
-            private java.lang.Object opticalconfigUuid_ = "";
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigId_ = builderForValue.build();
+                } else {
+                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return The opticalconfigUuid.
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
              */
-            public java.lang.String getOpticalconfigUuid() {
-                java.lang.Object ref = opticalconfigUuid_;
+            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
+                        getOpticalconfigIdBuilder().mergeFrom(value);
+                    } else {
+                        opticalconfigId_ = value;
+                    }
+                } else {
+                    opticalconfigIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public Builder clearOpticalconfigId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getOpticalconfigIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+                if (opticalconfigIdBuilder_ != null) {
+                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                }
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             */
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
+                    opticalconfigId_ = null;
+                }
+                return opticalconfigIdBuilder_;
+            }
+
+            private java.lang.Object config_ = "";
+
+            /**
+             * <code>string config = 2;</code>
+             * @return The config.
+             */
+            public java.lang.String getConfig() {
+                java.lang.Object ref = config_;
                 if (!(ref instanceof java.lang.String)) {
                     com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                     java.lang.String s = bs.toStringUtf8();
-                    opticalconfigUuid_ = s;
+                    config_ = s;
                     return s;
                 } else {
                     return (java.lang.String) ref;
@@ -72561,14 +73379,14 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return The bytes for opticalconfigUuid.
+             * <code>string config = 2;</code>
+             * @return The bytes for config.
              */
-            public com.google.protobuf.ByteString getOpticalconfigUuidBytes() {
-                java.lang.Object ref = opticalconfigUuid_;
+            public com.google.protobuf.ByteString getConfigBytes() {
+                java.lang.Object ref = config_;
                 if (ref instanceof String) {
                     com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    opticalconfigUuid_ = b;
+                    config_ = b;
                     return b;
                 } else {
                     return (com.google.protobuf.ByteString) ref;
@@ -72576,42 +73394,163 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @param value The opticalconfigUuid to set.
-             * @return This builder for chaining.
+             * <code>string config = 2;</code>
+             * @param value The config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfig(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @return This builder for chaining.
+             */
+            public Builder clearConfig() {
+                config_ = getDefaultInstance().getConfig();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string config = 2;</code>
+             * @param value The bytes for config to set.
+             * @return This builder for chaining.
+             */
+            public Builder setConfigBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                config_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            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 = 3;</code>
+             * @return Whether the deviceId field is set.
+             */
+            public boolean hasDeviceId() {
+                return ((bitField0_ & 0x00000004) != 0);
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</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 = 3;</code>
+             */
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    deviceId_ = value;
+                } else {
+                    deviceIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
+             */
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
+                if (deviceIdBuilder_ == null) {
+                    deviceId_ = builderForValue.build();
+                } else {
+                    deviceIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
+             */
+            public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000004) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
+                    } else {
+                        deviceId_ = value;
+                    }
+                } else {
+                    deviceIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
+             */
+            public Builder clearDeviceId() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder setOpticalconfigUuid(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                opticalconfigUuid_ = value;
+            public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
-                return this;
+                return getDeviceIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @return This builder for chaining.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder clearOpticalconfigUuid() {
-                opticalconfigUuid_ = getDefaultInstance().getOpticalconfigUuid();
-                onChanged();
-                return this;
+            public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+                if (deviceIdBuilder_ != null) {
+                    return deviceIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+                }
             }
 
             /**
-             * <code>string opticalconfig_uuid = 1;</code>
-             * @param value The bytes for opticalconfigUuid to set.
-             * @return This builder for chaining.
+             * <code>.context.DeviceId device_id = 3;</code>
              */
-            public Builder setOpticalconfigUuidBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            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;
                 }
-                checkByteStringIsUtf8(value);
-                opticalconfigUuid_ = value;
-                onChanged();
-                return this;
+                return deviceIdBuilder_;
             }
 
             @java.lang.Override
@@ -72623,230 +73562,157 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfigId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfig)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfigId)
-        private static final context.ContextOuterClass.OpticalConfigId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfig)
+        private static final context.ContextOuterClass.OpticalConfig DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfig();
         }
 
-        public static context.ContextOuterClass.OpticalConfigId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfig getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfigId> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigId>() {
+        private static final com.google.protobuf.Parser<OpticalConfig> PARSER = new com.google.protobuf.AbstractParser<OpticalConfig>() {
 
             @java.lang.Override
-            public OpticalConfigId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalConfigId(input, extensionRegistry);
+            public OpticalConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfigId> parser() {
+        public static com.google.protobuf.Parser<OpticalConfig> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfigId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfig> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfig)
+    public interface OpticalConfigListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigList)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return Whether the opticalconfigId field is set.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        boolean hasOpticalconfigId();
+        java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList();
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return The opticalconfigId.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
+        context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index);
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
+        int getOpticalconfigsCount();
 
         /**
-         * <code>string config = 2;</code>
-         * @return The config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        java.lang.String getConfig();
+        java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList();
 
         /**
-         * <code>string config = 2;</code>
-         * @return The bytes for config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
-        com.google.protobuf.ByteString getConfigBytes();
+        context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.OpticalConfig}
+     * Protobuf type {@code context.OpticalConfigList}
      */
-    public static final class OpticalConfig extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfig)
-    OpticalConfigOrBuilder {
+    public static final class OpticalConfigList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigList)
+    OpticalConfigListOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfig.newBuilder() to construct.
-        private OpticalConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfigList.newBuilder() to construct.
+        private OpticalConfigList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfig() {
-            config_ = "";
+        private OpticalConfigList() {
+            opticalconfigs_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfig();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private OpticalConfig(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.OpticalConfigId.Builder subBuilder = null;
-                                if (opticalconfigId_ != null) {
-                                    subBuilder = opticalconfigId_.toBuilder();
-                                }
-                                opticalconfigId_ = input.readMessage(context.ContextOuterClass.OpticalConfigId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(opticalconfigId_);
-                                    opticalconfigId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                config_ = 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();
-            }
+            return new OpticalConfigList();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
         }
 
-        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 1;
+        public static final int OPTICALCONFIGS_FIELD_NUMBER = 1;
 
-        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_;
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return Whether the opticalconfigId field is set.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public boolean hasOpticalconfigId() {
-            return opticalconfigId_ != null;
+        public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+            return opticalconfigs_;
         }
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-         * @return The opticalconfigId.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
-            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+            return opticalconfigs_;
         }
 
         /**
-         * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
-            return getOpticalconfigId();
+        public int getOpticalconfigsCount() {
+            return opticalconfigs_.size();
         }
 
-        public static final int CONFIG_FIELD_NUMBER = 2;
-
-        private volatile java.lang.Object config_;
-
         /**
-         * <code>string config = 2;</code>
-         * @return The config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public java.lang.String getConfig() {
-            java.lang.Object ref = config_;
-            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();
-                config_ = s;
-                return s;
-            }
+        public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+            return opticalconfigs_.get(index);
         }
 
         /**
-         * <code>string config = 2;</code>
-         * @return The bytes for config.
+         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getConfigBytes() {
-            java.lang.Object ref = config_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                config_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+            return opticalconfigs_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -72864,13 +73730,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (opticalconfigId_ != null) {
-                output.writeMessage(1, getOpticalconfigId());
-            }
-            if (!getConfigBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, config_);
+            for (int i = 0; i < opticalconfigs_.size(); i++) {
+                output.writeMessage(1, opticalconfigs_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -72879,13 +73742,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (opticalconfigId_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalconfigId());
-            }
-            if (!getConfigBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, config_);
+            for (int i = 0; i < opticalconfigs_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalconfigs_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -72895,19 +73755,13 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfig)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigList)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfig other = (context.ContextOuterClass.OpticalConfig) obj;
-            if (hasOpticalconfigId() != other.hasOpticalconfigId())
-                return false;
-            if (hasOpticalconfigId()) {
-                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
-                    return false;
-            }
-            if (!getConfig().equals(other.getConfig()))
+            context.ContextOuterClass.OpticalConfigList other = (context.ContextOuterClass.OpticalConfigList) obj;
+            if (!getOpticalconfigsList().equals(other.getOpticalconfigsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -72919,62 +73773,60 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasOpticalconfigId()) {
-                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalconfigId().hashCode();
+            if (getOpticalconfigsCount() > 0) {
+                hash = (37 * hash) + OPTICALCONFIGS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigsList().hashCode();
             }
-            hash = (37 * hash) + CONFIG_FIELD_NUMBER;
-            hash = (53 * hash) + getConfig().hashCode();
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList 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.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfig parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -72987,7 +73839,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfig prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigList prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -73003,61 +73855,55 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalConfig}
+         * Protobuf type {@code context.OpticalConfigList}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfig)
-        context.ContextOuterClass.OpticalConfigOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigList)
+        context.ContextOuterClass.OpticalConfigListOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfig.class, context.ContextOuterClass.OpticalConfig.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfig.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfigList.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 (opticalconfigIdBuilder_ == null) {
-                    opticalconfigId_ = null;
+                bitField0_ = 0;
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
                 } else {
-                    opticalconfigId_ = null;
-                    opticalconfigIdBuilder_ = null;
+                    opticalconfigs_ = null;
+                    opticalconfigsBuilder_.clear();
                 }
-                config_ = "";
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfig_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfig.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigList.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig build() {
-                context.ContextOuterClass.OpticalConfig result = buildPartial();
+            public context.ContextOuterClass.OpticalConfigList build() {
+                context.ContextOuterClass.OpticalConfigList result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -73065,69 +73911,70 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfig buildPartial() {
-                context.ContextOuterClass.OpticalConfig result = new context.ContextOuterClass.OpticalConfig(this);
-                if (opticalconfigIdBuilder_ == null) {
-                    result.opticalconfigId_ = opticalconfigId_;
-                } else {
-                    result.opticalconfigId_ = opticalconfigIdBuilder_.build();
+            public context.ContextOuterClass.OpticalConfigList buildPartial() {
+                context.ContextOuterClass.OpticalConfigList result = new context.ContextOuterClass.OpticalConfigList(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.config_ = config_;
                 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);
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalConfigList result) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.opticalconfigs_ = opticalconfigs_;
+                } else {
+                    result.opticalconfigs_ = opticalconfigsBuilder_.build();
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfig) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfig) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfigList) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigList) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfig other) {
-                if (other == context.ContextOuterClass.OpticalConfig.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigList other) {
+                if (other == context.ContextOuterClass.OpticalConfigList.getDefaultInstance())
                     return this;
-                if (other.hasOpticalconfigId()) {
-                    mergeOpticalconfigId(other.getOpticalconfigId());
-                }
-                if (!other.getConfig().isEmpty()) {
-                    config_ = other.config_;
-                    onChanged();
+                if (opticalconfigsBuilder_ == null) {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigs_.isEmpty()) {
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureOpticalconfigsIsMutable();
+                            opticalconfigs_.addAll(other.opticalconfigs_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.opticalconfigs_.isEmpty()) {
+                        if (opticalconfigsBuilder_.isEmpty()) {
+                            opticalconfigsBuilder_.dispose();
+                            opticalconfigsBuilder_ = null;
+                            opticalconfigs_ = other.opticalconfigs_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            opticalconfigsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalconfigsFieldBuilder() : null;
+                        } else {
+                            opticalconfigsBuilder_.addAllMessages(other.opticalconfigs_);
+                        }
+                    }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -73139,204 +73986,287 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalConfig parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.OpticalConfig m = input.readMessage(context.ContextOuterClass.OpticalConfig.parser(), extensionRegistry);
+                                    if (opticalconfigsBuilder_ == null) {
+                                        ensureOpticalconfigsIsMutable();
+                                        opticalconfigs_.add(m);
+                                    } else {
+                                        opticalconfigsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalConfig) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
-            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+            private int bitField0_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+            private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_ = java.util.Collections.emptyList();
+
+            private void ensureOpticalconfigsIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>(opticalconfigs_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> opticalconfigsBuilder_;
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-             * @return Whether the opticalconfigId field is set.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public boolean hasOpticalconfigId() {
-                return opticalconfigIdBuilder_ != null || opticalconfigId_ != null;
+            public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
+                if (opticalconfigsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+                } else {
+                    return opticalconfigsBuilder_.getMessageList();
+                }
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
-             * @return The opticalconfigId.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
-                if (opticalconfigIdBuilder_ == null) {
-                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+            public int getOpticalconfigsCount() {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.size();
                 } else {
-                    return opticalconfigIdBuilder_.getMessage();
+                    return opticalconfigsBuilder_.getCount();
                 }
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
-                if (opticalconfigIdBuilder_ == null) {
+            public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
+                } else {
+                    return opticalconfigsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalconfigId_ = value;
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, value);
                     onChanged();
                 } else {
-                    opticalconfigIdBuilder_.setMessage(value);
+                    opticalconfigsBuilder_.setMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
-                if (opticalconfigIdBuilder_ == null) {
-                    opticalconfigId_ = builderForValue.build();
+            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.set(index, builderForValue.build());
                     onChanged();
                 } else {
-                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
+                    opticalconfigsBuilder_.setMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
-                if (opticalconfigIdBuilder_ == null) {
-                    if (opticalconfigId_ != null) {
-                        opticalconfigId_ = context.ContextOuterClass.OpticalConfigId.newBuilder(opticalconfigId_).mergeFrom(value).buildPartial();
-                    } else {
-                        opticalconfigId_ = value;
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
                     }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(value);
                     onChanged();
                 } else {
-                    opticalconfigIdBuilder_.mergeFrom(value);
+                    opticalconfigsBuilder_.addMessage(value);
                 }
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder clearOpticalconfigId() {
-                if (opticalconfigIdBuilder_ == null) {
-                    opticalconfigId_ = null;
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
+                if (opticalconfigsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, value);
                     onChanged();
                 } else {
-                    opticalconfigId_ = null;
-                    opticalconfigIdBuilder_ = null;
+                    opticalconfigsBuilder_.addMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
-                onChanged();
-                return getOpticalconfigIdFieldBuilder().getBuilder();
+            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
-                if (opticalconfigIdBuilder_ != null) {
-                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder addAllOpticalconfigs(java.lang.Iterable<? extends context.ContextOuterClass.OpticalConfig> values) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalconfigs_);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder clearOpticalconfigs() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigs_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
+                } else {
+                    opticalconfigsBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             */
+            public Builder removeOpticalconfigs(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    ensureOpticalconfigsIsMutable();
+                    opticalconfigs_.remove(index);
+                    onChanged();
                 } else {
-                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                    opticalconfigsBuilder_.remove(index);
                 }
+                return this;
             }
 
             /**
-             * <code>.context.OpticalConfigId opticalconfig_id = 1;</code>
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
-                if (opticalconfigIdBuilder_ == null) {
-                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
-                    opticalconfigId_ = null;
-                }
-                return opticalconfigIdBuilder_;
+            public context.ContextOuterClass.OpticalConfig.Builder getOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().getBuilder(index);
             }
 
-            private java.lang.Object config_ = "";
-
             /**
-             * <code>string config = 2;</code>
-             * @return The config.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public java.lang.String getConfig() {
-                java.lang.Object ref = config_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    config_ = s;
-                    return s;
+            public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
+                if (opticalconfigsBuilder_ == null) {
+                    return opticalconfigs_.get(index);
                 } else {
-                    return (java.lang.String) ref;
+                    return opticalconfigsBuilder_.getMessageOrBuilder(index);
                 }
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @return The bytes for config.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public com.google.protobuf.ByteString getConfigBytes() {
-                java.lang.Object ref = config_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    config_ = b;
-                    return b;
+            public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
+                if (opticalconfigsBuilder_ != null) {
+                    return opticalconfigsBuilder_.getMessageOrBuilderList();
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    return java.util.Collections.unmodifiableList(opticalconfigs_);
                 }
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @param value The config to set.
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setConfig(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                config_ = value;
-                onChanged();
-                return this;
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder() {
+                return getOpticalconfigsFieldBuilder().addBuilder(context.ContextOuterClass.OpticalConfig.getDefaultInstance());
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder clearConfig() {
-                config_ = getDefaultInstance().getConfig();
-                onChanged();
-                return this;
+            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder(int index) {
+                return getOpticalconfigsFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalConfig.getDefaultInstance());
             }
 
             /**
-             * <code>string config = 2;</code>
-             * @param value The bytes for config to set.
-             * @return This builder for chaining.
+             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
              */
-            public Builder setConfigBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public java.util.List<context.ContextOuterClass.OpticalConfig.Builder> getOpticalconfigsBuilderList() {
+                return getOpticalconfigsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsFieldBuilder() {
+                if (opticalconfigsBuilder_ == null) {
+                    opticalconfigsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder>(opticalconfigs_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    opticalconfigs_ = null;
                 }
-                checkByteStringIsUtf8(value);
-                config_ = value;
-                onChanged();
-                return this;
+                return opticalconfigsBuilder_;
             }
 
             @java.lang.Override
@@ -73348,197 +74278,180 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfig)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigList)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfig)
-        private static final context.ContextOuterClass.OpticalConfig DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigList)
+        private static final context.ContextOuterClass.OpticalConfigList DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfig();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigList();
         }
 
-        public static context.ContextOuterClass.OpticalConfig getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigList getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfig> PARSER = new com.google.protobuf.AbstractParser<OpticalConfig>() {
+        private static final com.google.protobuf.Parser<OpticalConfigList> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigList>() {
 
             @java.lang.Override
-            public OpticalConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalConfig(input, extensionRegistry);
+            public OpticalConfigList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfig> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigList> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfig> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigList> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfig getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalConfigListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigList)
+    public interface OpticalConfigEventOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalConfigEvent)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return Whether the event field is set.
          */
-        java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList();
+        boolean hasEvent();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return The event.
          */
-        context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index);
+        context.ContextOuterClass.Event getEvent();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
          */
-        int getOpticalconfigsCount();
+        context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return Whether the opticalconfigId field is set.
          */
-        java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList();
+        boolean hasOpticalconfigId();
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return The opticalconfigId.
          */
-        context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index);
+        context.ContextOuterClass.OpticalConfigId getOpticalconfigId();
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         */
+        context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalConfigList}
+     * Protobuf type {@code context.OpticalConfigEvent}
      */
-    public static final class OpticalConfigList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigList)
-    OpticalConfigListOrBuilder {
+    public static final class OpticalConfigEvent extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalConfigEvent)
+    OpticalConfigEventOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalConfigList.newBuilder() to construct.
-        private OpticalConfigList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalConfigEvent.newBuilder() to construct.
+        private OpticalConfigEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalConfigList() {
-            opticalconfigs_ = java.util.Collections.emptyList();
+        private OpticalConfigEvent() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalConfigList();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private OpticalConfigList(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)) {
-                                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                opticalconfigs_.add(input.readMessage(context.ContextOuterClass.OpticalConfig.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)) {
-                    opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
+            return new OpticalConfigEvent();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigEvent.class, context.ContextOuterClass.OpticalConfigEvent.Builder.class);
         }
 
-        public static final int OPTICALCONFIGS_FIELD_NUMBER = 1;
+        public static final int EVENT_FIELD_NUMBER = 1;
 
-        private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_;
+        private context.ContextOuterClass.Event event_;
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return Whether the event field is set.
          */
         @java.lang.Override
-        public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
-            return opticalconfigs_;
+        public boolean hasEvent() {
+            return event_ != null;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
+         * @return The event.
          */
         @java.lang.Override
-        public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
-            return opticalconfigs_;
+        public context.ContextOuterClass.Event getEvent() {
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.Event event = 1;</code>
          */
         @java.lang.Override
-        public int getOpticalconfigsCount() {
-            return opticalconfigs_.size();
+        public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+            return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
 
+        public static final int OPTICALCONFIG_ID_FIELD_NUMBER = 2;
+
+        private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return Whether the opticalconfigId field is set.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
-            return opticalconfigs_.get(index);
+        public boolean hasOpticalconfigId() {
+            return opticalconfigId_ != null;
         }
 
         /**
-         * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         * @return The opticalconfigId.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
-            return opticalconfigs_.get(index);
+        public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+        }
+
+        /**
+         * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+            return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -73556,10 +74469,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            for (int i = 0; i < opticalconfigs_.size(); i++) {
-                output.writeMessage(1, opticalconfigs_.get(i));
+            if (event_ != null) {
+                output.writeMessage(1, getEvent());
+            }
+            if (opticalconfigId_ != null) {
+                output.writeMessage(2, getOpticalconfigId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -73568,10 +74484,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            for (int i = 0; i < opticalconfigs_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalconfigs_.get(i));
+            if (event_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEvent());
+            }
+            if (opticalconfigId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOpticalconfigId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -73581,13 +74500,23 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalConfigList)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalConfigEvent)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalConfigList other = (context.ContextOuterClass.OpticalConfigList) obj;
-            if (!getOpticalconfigsList().equals(other.getOpticalconfigsList()))
+            context.ContextOuterClass.OpticalConfigEvent other = (context.ContextOuterClass.OpticalConfigEvent) obj;
+            if (hasEvent() != other.hasEvent())
+                return false;
+            if (hasEvent()) {
+                if (!getEvent().equals(other.getEvent()))
+                    return false;
+            }
+            if (hasOpticalconfigId() != other.hasOpticalconfigId())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (hasOpticalconfigId()) {
+                if (!getOpticalconfigId().equals(other.getOpticalconfigId()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -73599,60 +74528,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (getOpticalconfigsCount() > 0) {
-                hash = (37 * hash) + OPTICALCONFIGS_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalconfigsList().hashCode();
+            if (hasEvent()) {
+                hash = (37 * hash) + EVENT_FIELD_NUMBER;
+                hash = (53 * hash) + getEvent().hashCode();
+            }
+            if (hasOpticalconfigId()) {
+                hash = (37 * hash) + OPTICALCONFIG_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalconfigId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent 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.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalConfigList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalConfigEvent parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -73665,7 +74598,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigList prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalConfigEvent prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -73681,61 +74614,58 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalConfigList}
+         * Protobuf type {@code context.OpticalConfigEvent}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigList)
-        context.ContextOuterClass.OpticalConfigListOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalConfigEvent)
+        context.ContextOuterClass.OpticalConfigEventOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigList.class, context.ContextOuterClass.OpticalConfigList.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalConfigEvent.class, context.ContextOuterClass.OpticalConfigEvent.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalConfigList.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalConfigEvent.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getOpticalconfigsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigs_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
-                } else {
-                    opticalconfigsBuilder_.clear();
+                bitField0_ = 0;
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
+                    eventBuilder_ = null;
+                }
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
                 }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalConfigList_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalConfigEvent_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalConfigList.getDefaultInstance();
+            public context.ContextOuterClass.OpticalConfigEvent getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalConfigEvent.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList build() {
-                context.ContextOuterClass.OpticalConfigList result = buildPartial();
+            public context.ContextOuterClass.OpticalConfigEvent build() {
+                context.ContextOuterClass.OpticalConfigEvent result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -73743,90 +74673,45 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalConfigList buildPartial() {
-                context.ContextOuterClass.OpticalConfigList result = new context.ContextOuterClass.OpticalConfigList(this);
-                int from_bitField0_ = bitField0_;
-                if (opticalconfigsBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
-                        opticalconfigs_ = java.util.Collections.unmodifiableList(opticalconfigs_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
-                    }
-                    result.opticalconfigs_ = opticalconfigs_;
-                } else {
-                    result.opticalconfigs_ = opticalconfigsBuilder_.build();
+            public context.ContextOuterClass.OpticalConfigEvent buildPartial() {
+                context.ContextOuterClass.OpticalConfigEvent result = new context.ContextOuterClass.OpticalConfigEvent(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.OpticalConfigEvent result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.event_ = eventBuilder_ == null ? event_ : eventBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.opticalconfigId_ = opticalconfigIdBuilder_ == null ? opticalconfigId_ : opticalconfigIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalConfigList) {
-                    return mergeFrom((context.ContextOuterClass.OpticalConfigList) other);
+                if (other instanceof context.ContextOuterClass.OpticalConfigEvent) {
+                    return mergeFrom((context.ContextOuterClass.OpticalConfigEvent) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigList other) {
-                if (other == context.ContextOuterClass.OpticalConfigList.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalConfigEvent other) {
+                if (other == context.ContextOuterClass.OpticalConfigEvent.getDefaultInstance())
                     return this;
-                if (opticalconfigsBuilder_ == null) {
-                    if (!other.opticalconfigs_.isEmpty()) {
-                        if (opticalconfigs_.isEmpty()) {
-                            opticalconfigs_ = other.opticalconfigs_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
-                        } else {
-                            ensureOpticalconfigsIsMutable();
-                            opticalconfigs_.addAll(other.opticalconfigs_);
-                        }
-                        onChanged();
-                    }
-                } else {
-                    if (!other.opticalconfigs_.isEmpty()) {
-                        if (opticalconfigsBuilder_.isEmpty()) {
-                            opticalconfigsBuilder_.dispose();
-                            opticalconfigsBuilder_ = null;
-                            opticalconfigs_ = other.opticalconfigs_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
-                            opticalconfigsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalconfigsFieldBuilder() : null;
-                        } else {
-                            opticalconfigsBuilder_.addAllMessages(other.opticalconfigs_);
-                        }
-                    }
+                if (other.hasEvent()) {
+                    mergeEvent(other.getEvent());
+                }
+                if (other.hasOpticalconfigId()) {
+                    mergeOpticalconfigId(other.getOpticalconfigId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -73838,257 +74723,288 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalConfigList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEventFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getOpticalconfigIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalConfigList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
             private int bitField0_;
 
-            private java.util.List<context.ContextOuterClass.OpticalConfig> opticalconfigs_ = java.util.Collections.emptyList();
-
-            private void ensureOpticalconfigsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
-                    opticalconfigs_ = new java.util.ArrayList<context.ContextOuterClass.OpticalConfig>(opticalconfigs_);
-                    bitField0_ |= 0x00000001;
-                }
-            }
-
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> opticalconfigsBuilder_;
+            private context.ContextOuterClass.Event event_;
 
-            /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
-             */
-            public java.util.List<context.ContextOuterClass.OpticalConfig> getOpticalconfigsList() {
-                if (opticalconfigsBuilder_ == null) {
-                    return java.util.Collections.unmodifiableList(opticalconfigs_);
-                } else {
-                    return opticalconfigsBuilder_.getMessageList();
-                }
-            }
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
+             * @return Whether the event field is set.
              */
-            public int getOpticalconfigsCount() {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.size();
-                } else {
-                    return opticalconfigsBuilder_.getCount();
-                }
+            public boolean hasEvent() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
+             * @return The event.
              */
-            public context.ContextOuterClass.OpticalConfig getOpticalconfigs(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.get(index);
+            public context.ContextOuterClass.Event getEvent() {
+                if (eventBuilder_ == null) {
+                    return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
                 } else {
-                    return opticalconfigsBuilder_.getMessage(index);
+                    return eventBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
+            public Builder setEvent(context.ContextOuterClass.Event value) {
+                if (eventBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.set(index, value);
-                    onChanged();
+                    event_ = value;
                 } else {
-                    opticalconfigsBuilder_.setMessage(index, value);
+                    eventBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder setOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.set(index, builderForValue.build());
-                    onChanged();
+            public Builder setEvent(context.ContextOuterClass.Event.Builder builderForValue) {
+                if (eventBuilder_ == null) {
+                    event_ = builderForValue.build();
                 } else {
-                    opticalconfigsBuilder_.setMessage(index, builderForValue.build());
+                    eventBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
+            public Builder mergeEvent(context.ContextOuterClass.Event value) {
+                if (eventBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && event_ != null && event_ != context.ContextOuterClass.Event.getDefaultInstance()) {
+                        getEventBuilder().mergeFrom(value);
+                    } else {
+                        event_ = value;
                     }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(value);
-                    onChanged();
                 } else {
-                    opticalconfigsBuilder_.addMessage(value);
+                    eventBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig value) {
-                if (opticalconfigsBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(index, value);
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.addMessage(index, value);
+            public Builder clearEvent() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                event_ = null;
+                if (eventBuilder_ != null) {
+                    eventBuilder_.dispose();
+                    eventBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(builderForValue.build());
-                    onChanged();
+            public context.ContextOuterClass.Event.Builder getEventBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getEventFieldBuilder().getBuilder();
+            }
+
+            /**
+             * <code>.context.Event event = 1;</code>
+             */
+            public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+                if (eventBuilder_ != null) {
+                    return eventBuilder_.getMessageOrBuilder();
                 } else {
-                    opticalconfigsBuilder_.addMessage(builderForValue.build());
+                    return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
                 }
-                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.Event event = 1;</code>
              */
-            public Builder addOpticalconfigs(int index, context.ContextOuterClass.OpticalConfig.Builder builderForValue) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.add(index, builderForValue.build());
-                    onChanged();
-                } else {
-                    opticalconfigsBuilder_.addMessage(index, builderForValue.build());
+            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 this;
+                return eventBuilder_;
             }
 
+            private context.ContextOuterClass.OpticalConfigId opticalconfigId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> opticalconfigIdBuilder_;
+
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+             * @return Whether the opticalconfigId field is set.
              */
-            public Builder addAllOpticalconfigs(java.lang.Iterable<? extends context.ContextOuterClass.OpticalConfig> values) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalconfigs_);
-                    onChanged();
+            public boolean hasOpticalconfigId() {
+                return ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
+             * @return The opticalconfigId.
+             */
+            public context.ContextOuterClass.OpticalConfigId getOpticalconfigId() {
+                if (opticalconfigIdBuilder_ == null) {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
                 } else {
-                    opticalconfigsBuilder_.addAllMessages(values);
+                    return opticalconfigIdBuilder_.getMessage();
                 }
-                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public Builder clearOpticalconfigs() {
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigs_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
-                    onChanged();
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalconfigId_ = value;
                 } else {
-                    opticalconfigsBuilder_.clear();
+                    opticalconfigIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public Builder removeOpticalconfigs(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    ensureOpticalconfigsIsMutable();
-                    opticalconfigs_.remove(index);
-                    onChanged();
+            public Builder setOpticalconfigId(context.ContextOuterClass.OpticalConfigId.Builder builderForValue) {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigId_ = builderForValue.build();
                 } else {
-                    opticalconfigsBuilder_.remove(index);
+                    opticalconfigIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
-             */
-            public context.ContextOuterClass.OpticalConfig.Builder getOpticalconfigsBuilder(int index) {
-                return getOpticalconfigsFieldBuilder().getBuilder(index);
-            }
-
-            /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfigOrBuilder getOpticalconfigsOrBuilder(int index) {
-                if (opticalconfigsBuilder_ == null) {
-                    return opticalconfigs_.get(index);
+            public Builder mergeOpticalconfigId(context.ContextOuterClass.OpticalConfigId value) {
+                if (opticalconfigIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && opticalconfigId_ != null && opticalconfigId_ != context.ContextOuterClass.OpticalConfigId.getDefaultInstance()) {
+                        getOpticalconfigIdBuilder().mergeFrom(value);
+                    } else {
+                        opticalconfigId_ = value;
+                    }
                 } else {
-                    return opticalconfigsBuilder_.getMessageOrBuilder(index);
+                    opticalconfigIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public java.util.List<? extends context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsOrBuilderList() {
-                if (opticalconfigsBuilder_ != null) {
-                    return opticalconfigsBuilder_.getMessageOrBuilderList();
-                } else {
-                    return java.util.Collections.unmodifiableList(opticalconfigs_);
+            public Builder clearOpticalconfigId() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                opticalconfigId_ = null;
+                if (opticalconfigIdBuilder_ != null) {
+                    opticalconfigIdBuilder_.dispose();
+                    opticalconfigIdBuilder_ = null;
                 }
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder() {
-                return getOpticalconfigsFieldBuilder().addBuilder(context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            public context.ContextOuterClass.OpticalConfigId.Builder getOpticalconfigIdBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getOpticalconfigIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public context.ContextOuterClass.OpticalConfig.Builder addOpticalconfigsBuilder(int index) {
-                return getOpticalconfigsFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalConfig.getDefaultInstance());
+            public context.ContextOuterClass.OpticalConfigIdOrBuilder getOpticalconfigIdOrBuilder() {
+                if (opticalconfigIdBuilder_ != null) {
+                    return opticalconfigIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return opticalconfigId_ == null ? context.ContextOuterClass.OpticalConfigId.getDefaultInstance() : opticalconfigId_;
+                }
             }
 
             /**
-             * <code>repeated .context.OpticalConfig opticalconfigs = 1;</code>
+             * <code>.context.OpticalConfigId opticalconfig_id = 2;</code>
              */
-            public java.util.List<context.ContextOuterClass.OpticalConfig.Builder> getOpticalconfigsBuilderList() {
-                return getOpticalconfigsFieldBuilder().getBuilderList();
-            }
-
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder> getOpticalconfigsFieldBuilder() {
-                if (opticalconfigsBuilder_ == null) {
-                    opticalconfigsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfig.Builder, context.ContextOuterClass.OpticalConfigOrBuilder>(opticalconfigs_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
-                    opticalconfigs_ = null;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder> getOpticalconfigIdFieldBuilder() {
+                if (opticalconfigIdBuilder_ == null) {
+                    opticalconfigIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfigId.Builder, context.ContextOuterClass.OpticalConfigIdOrBuilder>(getOpticalconfigId(), getParentForChildren(), isClean());
+                    opticalconfigId_ = null;
                 }
-                return opticalconfigsBuilder_;
+                return opticalconfigIdBuilder_;
             }
 
             @java.lang.Override
@@ -74100,174 +75016,180 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalConfigList)
+            // @@protoc_insertion_point(builder_scope:context.OpticalConfigEvent)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalConfigList)
-        private static final context.ContextOuterClass.OpticalConfigList DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalConfigEvent)
+        private static final context.ContextOuterClass.OpticalConfigEvent DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigList();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalConfigEvent();
         }
 
-        public static context.ContextOuterClass.OpticalConfigList getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalConfigEvent getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalConfigList> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigList>() {
+        private static final com.google.protobuf.Parser<OpticalConfigEvent> PARSER = new com.google.protobuf.AbstractParser<OpticalConfigEvent>() {
 
             @java.lang.Override
-            public OpticalConfigList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalConfigList(input, extensionRegistry);
+            public OpticalConfigEvent parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalConfigList> parser() {
+        public static com.google.protobuf.Parser<OpticalConfigEvent> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalConfigList> getParserForType() {
+        public com.google.protobuf.Parser<OpticalConfigEvent> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalConfigList getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalConfigEvent getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkId)
+    public interface OpticalEndPointIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalEndPointId)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <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 hasOpticalLinkUuid();
+        boolean hasEndpointUuid();
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return The endpointUuid.
          */
-        context.ContextOuterClass.Uuid getOpticalLinkUuid();
+        context.ContextOuterClass.Uuid getEndpointUuid();
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
          */
-        context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder();
+        context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalLinkId}
+     * Protobuf type {@code context.OpticalEndPointId}
      */
-    public static final class OpticalLinkId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkId)
-    OpticalLinkIdOrBuilder {
+    public static final class OpticalEndPointId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalEndPointId)
+    OpticalEndPointIdOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLinkId.newBuilder() to construct.
-        private OpticalLinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalEndPointId.newBuilder() to construct.
+        private OpticalEndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLinkId() {
+        private OpticalEndPointId() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLinkId();
+            return new OpticalEndPointId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
         }
 
         @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_OpticalEndPointId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalEndPointId.class, context.ContextOuterClass.OpticalEndPointId.Builder.class);
         }
 
-        private OpticalLinkId(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 (opticalLinkUuid_ != null) {
-                                    subBuilder = opticalLinkUuid_.toBuilder();
-                                }
-                                opticalLinkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(opticalLinkUuid_);
-                                    opticalLinkUuid_ = 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 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;
         }
 
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+        /**
+         * <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
-        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+        public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
-        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 1;
+        public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
 
-        private context.ContextOuterClass.Uuid opticalLinkUuid_;
+        private context.ContextOuterClass.Uuid endpointUuid_;
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return Whether the endpointUuid field is set.
          */
         @java.lang.Override
-        public boolean hasOpticalLinkUuid() {
-            return opticalLinkUuid_ != null;
+        public boolean hasEndpointUuid() {
+            return endpointUuid_ != null;
         }
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
+         * @return The endpointUuid.
          */
         @java.lang.Override
-        public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.Uuid getEndpointUuid() {
+            return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
 
         /**
-         * <code>.context.Uuid optical_link_uuid = 1;</code>
+         * <code>.context.Uuid endpoint_uuid = 3;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
-            return getOpticalLinkUuid();
+        public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+            return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -74285,10 +75207,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (opticalLinkUuid_ != null) {
-                output.writeMessage(1, getOpticalLinkUuid());
+            if (deviceId_ != null) {
+                output.writeMessage(2, getDeviceId());
+            }
+            if (endpointUuid_ != null) {
+                output.writeMessage(3, getEndpointUuid());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -74297,10 +75222,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (opticalLinkUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getOpticalLinkUuid());
+            if (deviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDeviceId());
             }
-            size += unknownFields.getSerializedSize();
+            if (endpointUuid_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getEndpointUuid());
+            }
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -74310,17 +75238,23 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLinkId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalEndPointId)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLinkId other = (context.ContextOuterClass.OpticalLinkId) obj;
-            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+            context.ContextOuterClass.OpticalEndPointId other = (context.ContextOuterClass.OpticalEndPointId) obj;
+            if (hasDeviceId() != other.hasDeviceId())
+                return false;
+            if (hasDeviceId()) {
+                if (!getDeviceId().equals(other.getDeviceId()))
+                    return false;
+            }
+            if (hasEndpointUuid() != other.hasEndpointUuid())
                 return false;
-            if (hasOpticalLinkUuid()) {
-                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+            if (hasEndpointUuid()) {
+                if (!getEndpointUuid().equals(other.getEndpointUuid()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -74332,60 +75266,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasOpticalLinkUuid()) {
-                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalLinkUuid().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();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId 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.OpticalLinkId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalEndPointId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -74398,7 +75336,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalEndPointId prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -74414,60 +75352,58 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLinkId}
+         * Protobuf type {@code context.OpticalEndPointId}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkId)
-        context.ContextOuterClass.OpticalLinkIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalEndPointId)
+        context.ContextOuterClass.OpticalEndPointIdOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkId.class, context.ContextOuterClass.OpticalLinkId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalEndPointId.class, context.ContextOuterClass.OpticalEndPointId.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLinkId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalEndPointId.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 (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = null;
-                } else {
-                    opticalLinkUuid_ = null;
-                    opticalLinkUuidBuilder_ = null;
+                bitField0_ = 0;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
+                    endpointUuidBuilder_ = null;
                 }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalEndPointId_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLinkId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalEndPointId getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalEndPointId.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId build() {
-                context.ContextOuterClass.OpticalLinkId result = buildPartial();
+            public context.ContextOuterClass.OpticalEndPointId build() {
+                context.ContextOuterClass.OpticalEndPointId result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -74475,64 +75411,45 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkId buildPartial() {
-                context.ContextOuterClass.OpticalLinkId result = new context.ContextOuterClass.OpticalLinkId(this);
-                if (opticalLinkUuidBuilder_ == null) {
-                    result.opticalLinkUuid_ = opticalLinkUuid_;
-                } else {
-                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_.build();
+            public context.ContextOuterClass.OpticalEndPointId buildPartial() {
+                context.ContextOuterClass.OpticalEndPointId result = new context.ContextOuterClass.OpticalEndPointId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.OpticalEndPointId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.endpointUuid_ = endpointUuidBuilder_ == null ? endpointUuid_ : endpointUuidBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLinkId) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLinkId) other);
+                if (other instanceof context.ContextOuterClass.OpticalEndPointId) {
+                    return mergeFrom((context.ContextOuterClass.OpticalEndPointId) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkId other) {
-                if (other == context.ContextOuterClass.OpticalLinkId.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalEndPointId other) {
+                if (other == context.ContextOuterClass.OpticalEndPointId.getDefaultInstance())
                     return this;
-                if (other.hasOpticalLinkUuid()) {
-                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                if (other.hasDeviceId()) {
+                    mergeDeviceId(other.getDeviceId());
+                }
+                if (other.hasEndpointUuid()) {
+                    mergeEndpointUuid(other.getEndpointUuid());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -74544,132 +75461,288 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalLinkId parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 18:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getEndpointUuidFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalLinkId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
-            private context.ContextOuterClass.Uuid opticalLinkUuid_;
+            private int bitField0_;
+
+            private context.ContextOuterClass.DeviceId deviceId_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> opticalLinkUuidBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
-             * @return Whether the opticalLinkUuid field is set.
+             * <code>.context.DeviceId device_id = 2;</code>
+             * @return Whether the deviceId field is set.
              */
-            public boolean hasOpticalLinkUuid() {
-                return opticalLinkUuidBuilder_ != null || opticalLinkUuid_ != null;
+            public boolean hasDeviceId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
-             * @return The opticalLinkUuid.
+             * <code>.context.DeviceId device_id = 2;</code>
+             * @return The deviceId.
              */
-            public context.ContextOuterClass.Uuid getOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+            public context.ContextOuterClass.DeviceId getDeviceId() {
+                if (deviceIdBuilder_ == null) {
+                    return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
                 } else {
-                    return opticalLinkUuidBuilder_.getMessage();
+                    return deviceIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
-                if (opticalLinkUuidBuilder_ == null) {
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalLinkUuid_ = value;
-                    onChanged();
+                    deviceId_ = value;
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(value);
+                    deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = builderForValue.build();
-                    onChanged();
+            public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
+                if (deviceIdBuilder_ == null) {
+                    deviceId_ = builderForValue.build();
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                    deviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.Uuid value) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    if (opticalLinkUuid_ != null) {
-                        opticalLinkUuid_ = context.ContextOuterClass.Uuid.newBuilder(opticalLinkUuid_).mergeFrom(value).buildPartial();
+            public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+                if (deviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
-                        opticalLinkUuid_ = value;
+                        deviceId_ = value;
                     }
-                    onChanged();
                 } else {
-                    opticalLinkUuidBuilder_.mergeFrom(value);
+                    deviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.DeviceId device_id = 2;</code>
              */
-            public Builder clearOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = null;
-                    onChanged();
+            public Builder clearDeviceId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
+                    deviceIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.DeviceId device_id = 2;</code>
+             */
+            public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000001;
+                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 ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <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;
+                } else {
+                    endpointUuidBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder setEndpointUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
+                if (endpointUuidBuilder_ == null) {
+                    endpointUuid_ = builderForValue.build();
+                } else {
+                    endpointUuidBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+                if (endpointUuidBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && endpointUuid_ != null && endpointUuid_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getEndpointUuidBuilder().mergeFrom(value);
+                    } else {
+                        endpointUuid_ = value;
+                    }
                 } else {
-                    opticalLinkUuid_ = null;
-                    opticalLinkUuidBuilder_ = null;
+                    endpointUuidBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
+             */
+            public Builder clearEndpointUuid() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                endpointUuid_ = null;
+                if (endpointUuidBuilder_ != null) {
+                    endpointUuidBuilder_.dispose();
+                    endpointUuidBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
-            public context.ContextOuterClass.Uuid.Builder getOpticalLinkUuidBuilder() {
+            public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
-                return getOpticalLinkUuidFieldBuilder().getBuilder();
+                return getEndpointUuidFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
-            public context.ContextOuterClass.UuidOrBuilder getOpticalLinkUuidOrBuilder() {
-                if (opticalLinkUuidBuilder_ != null) {
-                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+                if (endpointUuidBuilder_ != null) {
+                    return endpointUuidBuilder_.getMessageOrBuilder();
                 } else {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : opticalLinkUuid_;
+                    return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
                 }
             }
 
             /**
-             * <code>.context.Uuid optical_link_uuid = 1;</code>
+             * <code>.context.Uuid endpoint_uuid = 3;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getOpticalLinkUuidFieldBuilder() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
-                    opticalLinkUuid_ = null;
+            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 opticalLinkUuidBuilder_;
+                return endpointUuidBuilder_;
             }
 
             @java.lang.Override
@@ -74681,174 +75754,157 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLinkId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalEndPointId)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLinkId)
-        private static final context.ContextOuterClass.OpticalLinkId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalEndPointId)
+        private static final context.ContextOuterClass.OpticalEndPointId DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalEndPointId();
         }
 
-        public static context.ContextOuterClass.OpticalLinkId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalEndPointId getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLinkId> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkId>() {
+        private static final com.google.protobuf.Parser<OpticalEndPointId> PARSER = new com.google.protobuf.AbstractParser<OpticalEndPointId>() {
 
             @java.lang.Override
-            public OpticalLinkId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalLinkId(input, extensionRegistry);
+            public OpticalEndPointId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLinkId> parser() {
+        public static com.google.protobuf.Parser<OpticalEndPointId> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLinkId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalEndPointId> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalEndPointId getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface FiberIdOrBuilder extends // @@protoc_insertion_point(interface_extends:context.FiberId)
+    public interface OpticalLinkListOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkList)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList();
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        context.ContextOuterClass.OpticalLink getOpticalLinks(int index);
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        boolean hasFiberUuid();
+        int getOpticalLinksCount();
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return The fiberUuid.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        context.ContextOuterClass.Uuid getFiberUuid();
+        java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList();
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
-        context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder();
+        context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.FiberId}
+     * Protobuf type {@code context.OpticalLinkList}
      */
-    public static final class FiberId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.FiberId)
-    FiberIdOrBuilder {
+    public static final class OpticalLinkList extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkList)
+    OpticalLinkListOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use FiberId.newBuilder() to construct.
-        private FiberId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLinkList.newBuilder() to construct.
+        private OpticalLinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private FiberId() {
+        private OpticalLinkList() {
+            opticalLinks_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new FiberId();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private FiberId(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 (fiberUuid_ != null) {
-                                    subBuilder = fiberUuid_.toBuilder();
-                                }
-                                fiberUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(fiberUuid_);
-                                    fiberUuid_ = 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();
-            }
+            return new OpticalLinkList();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalLinkList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkList.class, context.ContextOuterClass.OpticalLinkList.Builder.class);
         }
 
-        public static final int FIBER_UUID_FIELD_NUMBER = 1;
+        public static final int OPTICAL_LINKS_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_;
 
-        private context.ContextOuterClass.Uuid fiberUuid_;
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+            return opticalLinks_;
+        }
+
+        /**
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
+         */
+        @java.lang.Override
+        public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+            return opticalLinks_;
+        }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public boolean hasFiberUuid() {
-            return fiberUuid_ != null;
+        public int getOpticalLinksCount() {
+            return opticalLinks_.size();
         }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
-         * @return The fiberUuid.
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.Uuid getFiberUuid() {
-            return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+        public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+            return opticalLinks_.get(index);
         }
 
         /**
-         * <code>.context.Uuid fiber_uuid = 1;</code>
+         * <code>repeated .context.OpticalLink optical_links = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
-            return getFiberUuid();
+        public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+            return opticalLinks_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -74866,10 +75922,10 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (fiberUuid_ != null) {
-                output.writeMessage(1, getFiberUuid());
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                output.writeMessage(1, opticalLinks_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -74878,10 +75934,10 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (fiberUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getFiberUuid());
+            for (int i = 0; i < opticalLinks_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, opticalLinks_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -74891,17 +75947,13 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.FiberId)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLinkList)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.FiberId other = (context.ContextOuterClass.FiberId) obj;
-            if (hasFiberUuid() != other.hasFiberUuid())
+            context.ContextOuterClass.OpticalLinkList other = (context.ContextOuterClass.OpticalLinkList) obj;
+            if (!getOpticalLinksList().equals(other.getOpticalLinksList()))
                 return false;
-            if (hasFiberUuid()) {
-                if (!getFiberUuid().equals(other.getFiberUuid()))
-                    return false;
-            }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -74913,60 +75965,60 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            if (hasFiberUuid()) {
-                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getFiberUuid().hashCode();
+            if (getOpticalLinksCount() > 0) {
+                hash = (37 * hash) + OPTICAL_LINKS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalLinksList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList 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.FiberId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.FiberId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkList parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -74979,7 +76031,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.FiberId prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkList prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -74995,60 +76047,55 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.FiberId}
+         * Protobuf type {@code context.OpticalLinkList}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.FiberId)
-        context.ContextOuterClass.FiberIdOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkList)
+        context.ContextOuterClass.OpticalLinkListOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_FiberId_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.FiberId.class, context.ContextOuterClass.FiberId.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkList.class, context.ContextOuterClass.OpticalLinkList.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.FiberId.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLinkList.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 (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = null;
+                bitField0_ = 0;
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
                 } else {
-                    fiberUuid_ = null;
-                    fiberUuidBuilder_ = null;
+                    opticalLinks_ = null;
+                    opticalLinksBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_FiberId_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkList_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
-                return context.ContextOuterClass.FiberId.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLinkList getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkList.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId build() {
-                context.ContextOuterClass.FiberId result = buildPartial();
+            public context.ContextOuterClass.OpticalLinkList build() {
+                context.ContextOuterClass.OpticalLinkList result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -75056,201 +76103,362 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.FiberId buildPartial() {
-                context.ContextOuterClass.FiberId result = new context.ContextOuterClass.FiberId(this);
-                if (fiberUuidBuilder_ == null) {
-                    result.fiberUuid_ = fiberUuid_;
+            public context.ContextOuterClass.OpticalLinkList buildPartial() {
+                context.ContextOuterClass.OpticalLinkList result = new context.ContextOuterClass.OpticalLinkList(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLinkList result) {
+                if (opticalLinksBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        opticalLinks_ = java.util.Collections.unmodifiableList(opticalLinks_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.opticalLinks_ = opticalLinks_;
+                } else {
+                    result.opticalLinks_ = opticalLinksBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkList result) {
+                int from_bitField0_ = bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.OpticalLinkList) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkList) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkList other) {
+                if (other == context.ContextOuterClass.OpticalLinkList.getDefaultInstance())
+                    return this;
+                if (opticalLinksBuilder_ == null) {
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinks_.isEmpty()) {
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureOpticalLinksIsMutable();
+                            opticalLinks_.addAll(other.opticalLinks_);
+                        }
+                        onChanged();
+                    }
                 } else {
-                    result.fiberUuid_ = fiberUuidBuilder_.build();
+                    if (!other.opticalLinks_.isEmpty()) {
+                        if (opticalLinksBuilder_.isEmpty()) {
+                            opticalLinksBuilder_.dispose();
+                            opticalLinksBuilder_ = null;
+                            opticalLinks_ = other.opticalLinks_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            opticalLinksBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getOpticalLinksFieldBuilder() : null;
+                        } else {
+                            opticalLinksBuilder_.addAllMessages(other.opticalLinks_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                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 {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    context.ContextOuterClass.OpticalLink m = input.readMessage(context.ContextOuterClass.OpticalLink.parser(), extensionRegistry);
+                                    if (opticalLinksBuilder_ == null) {
+                                        ensureOpticalLinksIsMutable();
+                                        opticalLinks_.add(m);
+                                    } else {
+                                        opticalLinksBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
                 }
-                onBuilt();
-                return result;
+                // finally
+                return this;
             }
 
-            @java.lang.Override
-            public Builder clone() {
-                return super.clone();
-            }
+            private int bitField0_;
 
-            @java.lang.Override
-            public Builder setField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.setField(field, value);
-            }
+            private java.util.List<context.ContextOuterClass.OpticalLink> opticalLinks_ = java.util.Collections.emptyList();
 
-            @java.lang.Override
-            public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
-                return super.clearField(field);
+            private void ensureOpticalLinksIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    opticalLinks_ = new java.util.ArrayList<context.ContextOuterClass.OpticalLink>(opticalLinks_);
+                    bitField0_ |= 0x00000001;
+                }
             }
 
-            @java.lang.Override
-            public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-                return super.clearOneof(oneof);
-            }
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> opticalLinksBuilder_;
 
-            @java.lang.Override
-            public Builder setRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
-                return super.setRepeatedField(field, index, value);
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink> getOpticalLinksList() {
+                if (opticalLinksBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                } else {
+                    return opticalLinksBuilder_.getMessageList();
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public int getOpticalLinksCount() {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.size();
+                } else {
+                    return opticalLinksBuilder_.getCount();
+                }
             }
 
-            @java.lang.Override
-            public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.FiberId) {
-                    return mergeFrom((context.ContextOuterClass.FiberId) other);
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink getOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
                 } else {
-                    super.mergeFrom(other);
-                    return this;
+                    return opticalLinksBuilder_.getMessage(index);
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.FiberId other) {
-                if (other == context.ContextOuterClass.FiberId.getDefaultInstance())
-                    return this;
-                if (other.hasFiberUuid()) {
-                    mergeFiberUuid(other.getFiberUuid());
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, value);
                 }
-                this.mergeUnknownFields(other.unknownFields);
-                onChanged();
                 return this;
             }
 
-            @java.lang.Override
-            public final boolean isInitialized() {
-                return true;
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder setOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
             }
 
-            @java.lang.Override
-            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.FiberId parsedMessage = null;
-                try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.FiberId) e.getUnfinishedMessage();
-                    throw e.unwrapIOException();
-                } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
                     }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(value);
                 }
                 return this;
             }
 
-            private context.ContextOuterClass.Uuid fiberUuid_;
-
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> fiberUuidBuilder_;
-
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
-             * @return Whether the fiberUuid field is set.
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public boolean hasFiberUuid() {
-                return fiberUuidBuilder_ != null || fiberUuid_ != null;
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink value) {
+                if (opticalLinksBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, value);
+                    onChanged();
+                } else {
+                    opticalLinksBuilder_.addMessage(index, value);
+                }
+                return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
-             * @return The fiberUuid.
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.Uuid getFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+            public Builder addOpticalLinks(context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(builderForValue.build());
+                    onChanged();
                 } else {
-                    return fiberUuidBuilder_.getMessage();
+                    opticalLinksBuilder_.addMessage(builderForValue.build());
                 }
+                return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.Uuid value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    fiberUuid_ = value;
+            public Builder addOpticalLinks(int index, context.ContextOuterClass.OpticalLink.Builder builderForValue) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.add(index, builderForValue.build());
                     onChanged();
                 } else {
-                    fiberUuidBuilder_.setMessage(value);
+                    opticalLinksBuilder_.addMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.Uuid.Builder builderForValue) {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = builderForValue.build();
+            public Builder addAllOpticalLinks(java.lang.Iterable<? extends context.ContextOuterClass.OpticalLink> values) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opticalLinks_);
                     onChanged();
                 } else {
-                    fiberUuidBuilder_.setMessage(builderForValue.build());
+                    opticalLinksBuilder_.addAllMessages(values);
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder mergeFiberUuid(context.ContextOuterClass.Uuid value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (fiberUuid_ != null) {
-                        fiberUuid_ = context.ContextOuterClass.Uuid.newBuilder(fiberUuid_).mergeFrom(value).buildPartial();
-                    } else {
-                        fiberUuid_ = value;
-                    }
+            public Builder clearOpticalLinks() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinks_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
                     onChanged();
                 } else {
-                    fiberUuidBuilder_.mergeFrom(value);
+                    opticalLinksBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public Builder clearFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = null;
+            public Builder removeOpticalLinks(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    ensureOpticalLinksIsMutable();
+                    opticalLinks_.remove(index);
                     onChanged();
                 } else {
-                    fiberUuid_ = null;
-                    fiberUuidBuilder_ = null;
+                    opticalLinksBuilder_.remove(index);
                 }
                 return this;
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.Uuid.Builder getFiberUuidBuilder() {
-                onChanged();
-                return getFiberUuidFieldBuilder().getBuilder();
+            public context.ContextOuterClass.OpticalLink.Builder getOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().getBuilder(index);
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            public context.ContextOuterClass.UuidOrBuilder getFiberUuidOrBuilder() {
-                if (fiberUuidBuilder_ != null) {
-                    return fiberUuidBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.OpticalLinkOrBuilder getOpticalLinksOrBuilder(int index) {
+                if (opticalLinksBuilder_ == null) {
+                    return opticalLinks_.get(index);
                 } else {
-                    return fiberUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : fiberUuid_;
+                    return opticalLinksBuilder_.getMessageOrBuilder(index);
                 }
             }
 
             /**
-             * <code>.context.Uuid fiber_uuid = 1;</code>
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> getFiberUuidFieldBuilder() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
-                    fiberUuid_ = null;
+            public java.util.List<? extends context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksOrBuilderList() {
+                if (opticalLinksBuilder_ != null) {
+                    return opticalLinksBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(opticalLinks_);
+                }
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder() {
+                return getOpticalLinksFieldBuilder().addBuilder(context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public context.ContextOuterClass.OpticalLink.Builder addOpticalLinksBuilder(int index) {
+                return getOpticalLinksFieldBuilder().addBuilder(index, context.ContextOuterClass.OpticalLink.getDefaultInstance());
+            }
+
+            /**
+             * <code>repeated .context.OpticalLink optical_links = 1;</code>
+             */
+            public java.util.List<context.ContextOuterClass.OpticalLink.Builder> getOpticalLinksBuilderList() {
+                return getOpticalLinksFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder> getOpticalLinksFieldBuilder() {
+                if (opticalLinksBuilder_ == null) {
+                    opticalLinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.OpticalLink.Builder, context.ContextOuterClass.OpticalLinkOrBuilder>(opticalLinks_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    opticalLinks_ = null;
                 }
-                return fiberUuidBuilder_;
+                return opticalLinksBuilder_;
             }
 
             @java.lang.Override
@@ -75262,448 +76470,280 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.FiberId)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLinkList)
         }
 
-        // @@protoc_insertion_point(class_scope:context.FiberId)
-        private static final context.ContextOuterClass.FiberId DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkList)
+        private static final context.ContextOuterClass.OpticalLinkList DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.FiberId();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkList();
         }
 
-        public static context.ContextOuterClass.FiberId getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLinkList getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<FiberId> PARSER = new com.google.protobuf.AbstractParser<FiberId>() {
+        private static final com.google.protobuf.Parser<OpticalLinkList> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkList>() {
 
             @java.lang.Override
-            public FiberId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new FiberId(input, extensionRegistry);
+            public OpticalLinkList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<FiberId> parser() {
+        public static com.google.protobuf.Parser<OpticalLinkList> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<FiberId> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLinkList> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.FiberId getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLinkList getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface FiberOrBuilder extends // @@protoc_insertion_point(interface_extends:context.Fiber)
+    public interface OpticalLinkDetailsOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkDetails)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string ID = 10;</code>
-         * @return The iD.
-         */
-        java.lang.String getID();
-
-        /**
-         * <code>string ID = 10;</code>
-         * @return The bytes for iD.
+         * <code>float length = 1;</code>
+         * @return The length.
          */
-        com.google.protobuf.ByteString getIDBytes();
+        float getLength();
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The srcPort.
          */
         java.lang.String getSrcPort();
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The bytes for srcPort.
          */
         com.google.protobuf.ByteString getSrcPortBytes();
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The dstPort.
          */
         java.lang.String getDstPort();
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The bytes for dstPort.
          */
         com.google.protobuf.ByteString getDstPortBytes();
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The localPeerPort.
          */
         java.lang.String getLocalPeerPort();
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The bytes for localPeerPort.
          */
         com.google.protobuf.ByteString getLocalPeerPortBytes();
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The remotePeerPort.
          */
         java.lang.String getRemotePeerPort();
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The bytes for remotePeerPort.
          */
         com.google.protobuf.ByteString getRemotePeerPortBytes();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return A list containing the cSlots.
+         * <code>bool used = 6;</code>
+         * @return The used.
          */
-        java.util.List<java.lang.Integer> getCSlotsList();
+        boolean getUsed();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return The count of cSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
         int getCSlotsCount();
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @param index The index of the element to return.
-         * @return The cSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        boolean containsCSlots(java.lang.String key);
+
+        /**
+         * Use {@link #getCSlotsMap()} instead.
          */
-        int getCSlots(int index);
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getCSlots();
+
+        /**
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap();
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return A list containing the lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        java.util.List<java.lang.Integer> getLSlotsList();
+        int getCSlotsOrDefault(java.lang.String key, int defaultValue);
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return The count of lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+         */
+        int getCSlotsOrThrow(java.lang.String key);
+
+        /**
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
         int getLSlotsCount();
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @param index The index of the element to return.
-         * @return The lSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getLSlots(int index);
+        boolean containsLSlots(java.lang.String key);
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return A list containing the sSlots.
+         * Use {@link #getLSlotsMap()} instead.
          */
-        java.util.List<java.lang.Integer> getSSlotsList();
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getLSlots();
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return The count of sSlots.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getSSlotsCount();
+        java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap();
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @param index The index of the element to return.
-         * @return The sSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        int getSSlots(int index);
+        int getLSlotsOrDefault(java.lang.String key, int defaultValue);
 
         /**
-         * <code>float length = 8;</code>
-         * @return The length.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        float getLength();
+        int getLSlotsOrThrow(java.lang.String key);
 
         /**
-         * <code>bool used = 9;</code>
-         * @return The used.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        boolean getUsed();
+        int getSSlotsCount();
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        boolean hasFiberUuid();
+        boolean containsSSlots(java.lang.String key);
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return The fiberUuid.
+         * Use {@link #getSSlotsMap()} instead.
          */
-        context.ContextOuterClass.FiberId getFiberUuid();
+        @java.lang.Deprecated
+        java.util.Map<java.lang.String, java.lang.Integer> getSSlots();
+
+        /**
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
+         */
+        java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap();
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
-        context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder();
+        int getSSlotsOrDefault(java.lang.String key, int defaultValue);
+
+        /**
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
+         */
+        int getSSlotsOrThrow(java.lang.String key);
     }
 
     /**
-     * Protobuf type {@code context.Fiber}
+     * Protobuf type {@code context.OpticalLinkDetails}
      */
-    public static final class Fiber extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.Fiber)
-    FiberOrBuilder {
+    public static final class OpticalLinkDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkDetails)
+    OpticalLinkDetailsOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use Fiber.newBuilder() to construct.
-        private Fiber(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLinkDetails.newBuilder() to construct.
+        private OpticalLinkDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private Fiber() {
-            iD_ = "";
+        private OpticalLinkDetails() {
             srcPort_ = "";
             dstPort_ = "";
             localPeerPort_ = "";
             remotePeerPort_ = "";
-            cSlots_ = emptyIntList();
-            lSlots_ = emptyIntList();
-            sSlots_ = emptyIntList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new Fiber();
+            return new OpticalLinkDetails();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
         }
 
-        private Fiber(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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                srcPort_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                dstPort_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                localPeerPort_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                remotePeerPort_ = s;
-                                break;
-                            }
-                        case 40:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    cSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                cSlots_.addInt(input.readInt32());
-                                break;
-                            }
-                        case 42:
-                            {
-                                int length = input.readRawVarint32();
-                                int limit = input.pushLimit(length);
-                                if (!((mutable_bitField0_ & 0x00000001) != 0) && input.getBytesUntilLimit() > 0) {
-                                    cSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                while (input.getBytesUntilLimit() > 0) {
-                                    cSlots_.addInt(input.readInt32());
-                                }
-                                input.popLimit(limit);
-                                break;
-                            }
-                        case 48:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                                    lSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                lSlots_.addInt(input.readInt32());
-                                break;
-                            }
-                        case 50:
-                            {
-                                int length = input.readRawVarint32();
-                                int limit = input.pushLimit(length);
-                                if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
-                                    lSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000002;
-                                }
-                                while (input.getBytesUntilLimit() > 0) {
-                                    lSlots_.addInt(input.readInt32());
-                                }
-                                input.popLimit(limit);
-                                break;
-                            }
-                        case 56:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                                    sSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                sSlots_.addInt(input.readInt32());
-                                break;
-                            }
-                        case 58:
-                            {
-                                int length = input.readRawVarint32();
-                                int limit = input.pushLimit(length);
-                                if (!((mutable_bitField0_ & 0x00000004) != 0) && input.getBytesUntilLimit() > 0) {
-                                    sSlots_ = newIntList();
-                                    mutable_bitField0_ |= 0x00000004;
-                                }
-                                while (input.getBytesUntilLimit() > 0) {
-                                    sSlots_.addInt(input.readInt32());
-                                }
-                                input.popLimit(limit);
-                                break;
-                            }
-                        case 69:
-                            {
-                                length_ = input.readFloat();
-                                break;
-                            }
-                        case 72:
-                            {
-                                used_ = input.readBool();
-                                break;
-                            }
-                        case 82:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                iD_ = s;
-                                break;
-                            }
-                        case 90:
-                            {
-                                context.ContextOuterClass.FiberId.Builder subBuilder = null;
-                                if (fiberUuid_ != null) {
-                                    subBuilder = fiberUuid_.toBuilder();
-                                }
-                                fiberUuid_ = input.readMessage(context.ContextOuterClass.FiberId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(fiberUuid_);
-                                    fiberUuid_ = 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)) {
-                    // C
-                    cSlots_.makeImmutable();
-                }
-                if (((mutable_bitField0_ & 0x00000002) != 0)) {
-                    // C
-                    lSlots_.makeImmutable();
-                }
-                if (((mutable_bitField0_ & 0x00000004) != 0)) {
-                    // C
-                    sSlots_.makeImmutable();
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
+        @SuppressWarnings({ "rawtypes" })
+        @java.lang.Override
+        protected com.google.protobuf.MapField internalGetMapField(int number) {
+            switch(number) {
+                case 7:
+                    return internalGetCSlots();
+                case 8:
+                    return internalGetLSlots();
+                case 9:
+                    return internalGetSSlots();
+                default:
+                    throw new RuntimeException("Invalid map field number: " + number);
             }
         }
 
-        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
-        }
-
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
         }
 
-        public static final int ID_FIELD_NUMBER = 10;
-
-        private volatile java.lang.Object iD_;
+        public static final int LENGTH_FIELD_NUMBER = 1;
 
-        /**
-         * <code>string ID = 10;</code>
-         * @return The iD.
-         */
-        @java.lang.Override
-        public java.lang.String getID() {
-            java.lang.Object ref = iD_;
-            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();
-                iD_ = s;
-                return s;
-            }
-        }
+        private float length_ = 0F;
 
         /**
-         * <code>string ID = 10;</code>
-         * @return The bytes for iD.
+         * <code>float length = 1;</code>
+         * @return The length.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getIDBytes() {
-            java.lang.Object ref = iD_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                iD_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public float getLength() {
+            return length_;
         }
 
-        public static final int SRC_PORT_FIELD_NUMBER = 1;
+        public static final int SRC_PORT_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object srcPort_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object srcPort_ = "";
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The srcPort.
          */
         @java.lang.Override
@@ -75720,7 +76760,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string src_port = 1;</code>
+         * <code>string src_port = 2;</code>
          * @return The bytes for srcPort.
          */
         @java.lang.Override
@@ -75735,12 +76775,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int DST_PORT_FIELD_NUMBER = 2;
+        public static final int DST_PORT_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object dstPort_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object dstPort_ = "";
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The dstPort.
          */
         @java.lang.Override
@@ -75757,7 +76798,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string dst_port = 2;</code>
+         * <code>string dst_port = 3;</code>
          * @return The bytes for dstPort.
          */
         @java.lang.Override
@@ -75772,12 +76813,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int LOCAL_PEER_PORT_FIELD_NUMBER = 3;
+        public static final int LOCAL_PEER_PORT_FIELD_NUMBER = 4;
 
-        private volatile java.lang.Object localPeerPort_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object localPeerPort_ = "";
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The localPeerPort.
          */
         @java.lang.Override
@@ -75794,7 +76836,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string local_peer_port = 3;</code>
+         * <code>string local_peer_port = 4;</code>
          * @return The bytes for localPeerPort.
          */
         @java.lang.Override
@@ -75809,12 +76851,13 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int REMOTE_PEER_PORT_FIELD_NUMBER = 4;
+        public static final int REMOTE_PEER_PORT_FIELD_NUMBER = 5;
 
-        private volatile java.lang.Object remotePeerPort_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object remotePeerPort_ = "";
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The remotePeerPort.
          */
         @java.lang.Override
@@ -75831,7 +76874,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * <code>string remote_peer_port = 4;</code>
+         * <code>string remote_peer_port = 5;</code>
          * @return The bytes for remotePeerPort.
          */
         @java.lang.Override
@@ -75846,156 +76889,245 @@ public final class ContextOuterClass {
             }
         }
 
-        public static final int C_SLOTS_FIELD_NUMBER = 5;
+        public static final int USED_FIELD_NUMBER = 6;
 
-        private com.google.protobuf.Internal.IntList cSlots_;
+        private boolean used_ = false;
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return A list containing the cSlots.
+         * <code>bool used = 6;</code>
+         * @return The used.
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getCSlotsList() {
+        public boolean getUsed() {
+            return used_;
+        }
+
+        public static final int C_SLOTS_FIELD_NUMBER = 7;
+
+        private static final class CSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
+        }
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> cSlots_;
+
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetCSlots() {
+            if (cSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(CSlotsDefaultEntryHolder.defaultEntry);
+            }
             return cSlots_;
         }
 
-        /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @return The count of cSlots.
-         */
         public int getCSlotsCount() {
-            return cSlots_.size();
+            return internalGetCSlots().getMap().size();
         }
 
         /**
-         * <code>repeated int32 c_slots = 5;</code>
-         * @param index The index of the element to return.
-         * @return The cSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getCSlots(int index) {
-            return cSlots_.getInt(index);
+        @java.lang.Override
+        public boolean containsCSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetCSlots().getMap().containsKey(key);
         }
 
-        private int cSlotsMemoizedSerializedSize = -1;
-
-        public static final int L_SLOTS_FIELD_NUMBER = 6;
-
-        private com.google.protobuf.Internal.IntList lSlots_;
+        /**
+         * Use {@link #getCSlotsMap()} instead.
+         */
+        @java.lang.Override
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getCSlots() {
+            return getCSlotsMap();
+        }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return A list containing the lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getLSlotsList() {
-            return lSlots_;
+        public java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap() {
+            return internalGetCSlots().getMap();
         }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @return The count of lSlots.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getLSlotsCount() {
-            return lSlots_.size();
+        @java.lang.Override
+        public int getCSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
         }
 
         /**
-         * <code>repeated int32 l_slots = 6;</code>
-         * @param index The index of the element to return.
-         * @return The lSlots at the given index.
+         * <code>map&lt;string, int32&gt; c_slots = 7;</code>
          */
-        public int getLSlots(int index) {
-            return lSlots_.getInt(index);
+        @java.lang.Override
+        public int getCSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
+        }
+
+        public static final int L_SLOTS_FIELD_NUMBER = 8;
+
+        private static final class LSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
         }
 
-        private int lSlotsMemoizedSerializedSize = -1;
+        @SuppressWarnings("serial")
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> lSlots_;
 
-        public static final int S_SLOTS_FIELD_NUMBER = 7;
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetLSlots() {
+            if (lSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(LSlotsDefaultEntryHolder.defaultEntry);
+            }
+            return lSlots_;
+        }
 
-        private com.google.protobuf.Internal.IntList sSlots_;
+        public int getLSlotsCount() {
+            return internalGetLSlots().getMap().size();
+        }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return A list containing the sSlots.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
         @java.lang.Override
-        public java.util.List<java.lang.Integer> getSSlotsList() {
-            return sSlots_;
+        public boolean containsLSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetLSlots().getMap().containsKey(key);
         }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @return The count of sSlots.
+         * Use {@link #getLSlotsMap()} instead.
          */
-        public int getSSlotsCount() {
-            return sSlots_.size();
+        @java.lang.Override
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getLSlots() {
+            return getLSlotsMap();
         }
 
         /**
-         * <code>repeated int32 s_slots = 7;</code>
-         * @param index The index of the element to return.
-         * @return The sSlots at the given index.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
-        public int getSSlots(int index) {
-            return sSlots_.getInt(index);
+        @java.lang.Override
+        public java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap() {
+            return internalGetLSlots().getMap();
         }
 
-        private int sSlotsMemoizedSerializedSize = -1;
-
-        public static final int LENGTH_FIELD_NUMBER = 8;
-
-        private float length_;
+        /**
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
+         */
+        @java.lang.Override
+        public int getLSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
+        }
 
         /**
-         * <code>float length = 8;</code>
-         * @return The length.
+         * <code>map&lt;string, int32&gt; l_slots = 8;</code>
          */
         @java.lang.Override
-        public float getLength() {
-            return length_;
+        public int getLSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
+        }
+
+        public static final int S_SLOTS_FIELD_NUMBER = 9;
+
+        private static final class SSlotsDefaultEntryHolder {
+
+            static final com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> defaultEntry = com.google.protobuf.MapEntry.<java.lang.String, java.lang.Integer>newDefaultInstance(context.ContextOuterClass.internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "", com.google.protobuf.WireFormat.FieldType.INT32, 0);
         }
 
-        public static final int USED_FIELD_NUMBER = 9;
+        @SuppressWarnings("serial")
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> sSlots_;
+
+        private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetSSlots() {
+            if (sSlots_ == null) {
+                return com.google.protobuf.MapField.emptyMapField(SSlotsDefaultEntryHolder.defaultEntry);
+            }
+            return sSlots_;
+        }
 
-        private boolean used_;
+        public int getSSlotsCount() {
+            return internalGetSSlots().getMap().size();
+        }
 
         /**
-         * <code>bool used = 9;</code>
-         * @return The used.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public boolean getUsed() {
-            return used_;
+        public boolean containsSSlots(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            return internalGetSSlots().getMap().containsKey(key);
         }
 
-        public static final int FIBER_UUID_FIELD_NUMBER = 11;
-
-        private context.ContextOuterClass.FiberId fiberUuid_;
+        /**
+         * Use {@link #getSSlotsMap()} instead.
+         */
+        @java.lang.Override
+        @java.lang.Deprecated
+        public java.util.Map<java.lang.String, java.lang.Integer> getSSlots() {
+            return getSSlotsMap();
+        }
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return Whether the fiberUuid field is set.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public boolean hasFiberUuid() {
-            return fiberUuid_ != null;
+        public java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap() {
+            return internalGetSSlots().getMap();
         }
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
-         * @return The fiberUuid.
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberId getFiberUuid() {
-            return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+        public int getSSlotsOrDefault(java.lang.String key, int defaultValue) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+            return map.containsKey(key) ? map.get(key) : defaultValue;
         }
 
         /**
-         * <code>.context.FiberId fiber_uuid = 11;</code>
+         * <code>map&lt;string, int32&gt; s_slots = 9;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
-            return getFiberUuid();
+        public int getSSlotsOrThrow(java.lang.String key) {
+            if (key == null) {
+                throw new NullPointerException("map key");
+            }
+            java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+            if (!map.containsKey(key)) {
+                throw new java.lang.IllegalArgumentException();
+            }
+            return map.get(key);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -76013,53 +77145,28 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            getSerializedSize();
-            if (!getSrcPortBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcPort_);
-            }
-            if (!getDstPortBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstPort_);
-            }
-            if (!getLocalPeerPortBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, localPeerPort_);
-            }
-            if (!getRemotePeerPortBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, remotePeerPort_);
-            }
-            if (getCSlotsList().size() > 0) {
-                output.writeUInt32NoTag(42);
-                output.writeUInt32NoTag(cSlotsMemoizedSerializedSize);
-            }
-            for (int i = 0; i < cSlots_.size(); i++) {
-                output.writeInt32NoTag(cSlots_.getInt(i));
-            }
-            if (getLSlotsList().size() > 0) {
-                output.writeUInt32NoTag(50);
-                output.writeUInt32NoTag(lSlotsMemoizedSerializedSize);
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                output.writeFloat(1, length_);
             }
-            for (int i = 0; i < lSlots_.size(); i++) {
-                output.writeInt32NoTag(lSlots_.getInt(i));
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, srcPort_);
             }
-            if (getSSlotsList().size() > 0) {
-                output.writeUInt32NoTag(58);
-                output.writeUInt32NoTag(sSlotsMemoizedSerializedSize);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, dstPort_);
             }
-            for (int i = 0; i < sSlots_.size(); i++) {
-                output.writeInt32NoTag(sSlots_.getInt(i));
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, localPeerPort_);
             }
-            if (length_ != 0F) {
-                output.writeFloat(8, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 5, remotePeerPort_);
             }
             if (used_ != false) {
-                output.writeBool(9, used_);
-            }
-            if (!getIDBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 10, iD_);
+                output.writeBool(6, used_);
             }
-            if (fiberUuid_ != null) {
-                output.writeMessage(11, getFiberUuid());
-            }
-            unknownFields.writeTo(output);
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetCSlots(), CSlotsDefaultEntryHolder.defaultEntry, 7);
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetLSlots(), LSlotsDefaultEntryHolder.defaultEntry, 8);
+            com.google.protobuf.GeneratedMessageV3.serializeStringMapTo(output, internalGetSSlots(), SSlotsDefaultEntryHolder.defaultEntry, 9);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -76068,67 +77175,37 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getSrcPortBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcPort_);
-            }
-            if (!getDstPortBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstPort_);
-            }
-            if (!getLocalPeerPortBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, localPeerPort_);
-            }
-            if (!getRemotePeerPortBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, remotePeerPort_);
+            if (java.lang.Float.floatToRawIntBits(length_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, length_);
             }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < cSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(cSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getCSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                cSlotsMemoizedSerializedSize = dataSize;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, srcPort_);
             }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < lSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(lSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getLSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                lSlotsMemoizedSerializedSize = dataSize;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dstPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, dstPort_);
             }
-            {
-                int dataSize = 0;
-                for (int i = 0; i < sSlots_.size(); i++) {
-                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(sSlots_.getInt(i));
-                }
-                size += dataSize;
-                if (!getSSlotsList().isEmpty()) {
-                    size += 1;
-                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
-                }
-                sSlotsMemoizedSerializedSize = dataSize;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(localPeerPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, localPeerPort_);
             }
-            if (length_ != 0F) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(8, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(remotePeerPort_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, remotePeerPort_);
             }
             if (used_ != false) {
-                size += com.google.protobuf.CodedOutputStream.computeBoolSize(9, used_);
+                size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, used_);
+            }
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetCSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> cSlots__ = CSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, cSlots__);
             }
-            if (!getIDBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, iD_);
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetLSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> lSlots__ = LSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, lSlots__);
             }
-            if (fiberUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getFiberUuid());
+            for (java.util.Map.Entry<java.lang.String, java.lang.Integer> entry : internalGetSSlots().getMap().entrySet()) {
+                com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> sSlots__ = SSlotsDefaultEntryHolder.defaultEntry.newBuilderForType().setKey(entry.getKey()).setValue(entry.getValue()).build();
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, sSlots__);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -76138,11 +77215,11 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.Fiber)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLinkDetails)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.Fiber other = (context.ContextOuterClass.Fiber) obj;
-            if (!getID().equals(other.getID()))
+            context.ContextOuterClass.OpticalLinkDetails other = (context.ContextOuterClass.OpticalLinkDetails) obj;
+            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
                 return false;
             if (!getSrcPort().equals(other.getSrcPort()))
                 return false;
@@ -76152,23 +77229,15 @@ public final class ContextOuterClass {
                 return false;
             if (!getRemotePeerPort().equals(other.getRemotePeerPort()))
                 return false;
-            if (!getCSlotsList().equals(other.getCSlotsList()))
-                return false;
-            if (!getLSlotsList().equals(other.getLSlotsList()))
-                return false;
-            if (!getSSlotsList().equals(other.getSSlotsList()))
+            if (getUsed() != other.getUsed())
                 return false;
-            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+            if (!internalGetCSlots().equals(other.internalGetCSlots()))
                 return false;
-            if (getUsed() != other.getUsed())
+            if (!internalGetLSlots().equals(other.internalGetLSlots()))
                 return false;
-            if (hasFiberUuid() != other.hasFiberUuid())
+            if (!internalGetSSlots().equals(other.internalGetSSlots()))
                 return false;
-            if (hasFiberUuid()) {
-                if (!getFiberUuid().equals(other.getFiberUuid()))
-                    return false;
-            }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -76180,8 +77249,8 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + ID_FIELD_NUMBER;
-            hash = (53 * hash) + getID().hashCode();
+            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
             hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
             hash = (53 * hash) + getSrcPort().hashCode();
             hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
@@ -76190,76 +77259,70 @@ public final class ContextOuterClass {
             hash = (53 * hash) + getLocalPeerPort().hashCode();
             hash = (37 * hash) + REMOTE_PEER_PORT_FIELD_NUMBER;
             hash = (53 * hash) + getRemotePeerPort().hashCode();
-            if (getCSlotsCount() > 0) {
+            hash = (37 * hash) + USED_FIELD_NUMBER;
+            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUsed());
+            if (!internalGetCSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + C_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getCSlotsList().hashCode();
+                hash = (53 * hash) + internalGetCSlots().hashCode();
             }
-            if (getLSlotsCount() > 0) {
+            if (!internalGetLSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + L_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getLSlotsList().hashCode();
+                hash = (53 * hash) + internalGetLSlots().hashCode();
             }
-            if (getSSlotsCount() > 0) {
+            if (!internalGetSSlots().getMap().isEmpty()) {
                 hash = (37 * hash) + S_SLOTS_FIELD_NUMBER;
-                hash = (53 * hash) + getSSlotsList().hashCode();
+                hash = (53 * hash) + internalGetSSlots().hashCode();
             }
-            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
-            hash = (37 * hash) + USED_FIELD_NUMBER;
-            hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUsed());
-            if (hasFiberUuid()) {
-                hash = (37 * hash) + FIBER_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getFiberUuid().hashCode();
-            }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails 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.Fiber parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.Fiber parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -76272,7 +77335,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.Fiber prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkDetails prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -76288,73 +77351,85 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.Fiber}
+         * Protobuf type {@code context.OpticalLinkDetails}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.Fiber)
-        context.ContextOuterClass.FiberOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkDetails)
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            }
+
+            @SuppressWarnings({ "rawtypes" })
+            protected com.google.protobuf.MapField internalGetMapField(int number) {
+                switch(number) {
+                    case 7:
+                        return internalGetCSlots();
+                    case 8:
+                        return internalGetLSlots();
+                    case 9:
+                        return internalGetSSlots();
+                    default:
+                        throw new RuntimeException("Invalid map field number: " + number);
+                }
+            }
+
+            @SuppressWarnings({ "rawtypes" })
+            protected com.google.protobuf.MapField internalGetMutableMapField(int number) {
+                switch(number) {
+                    case 7:
+                        return internalGetMutableCSlots();
+                    case 8:
+                        return internalGetMutableLSlots();
+                    case 9:
+                        return internalGetMutableSSlots();
+                    default:
+                        throw new RuntimeException("Invalid map field number: " + number);
+                }
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_Fiber_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.Fiber.class, context.ContextOuterClass.Fiber.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.Fiber.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLinkDetails.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();
-                iD_ = "";
+                bitField0_ = 0;
+                length_ = 0F;
                 srcPort_ = "";
                 dstPort_ = "";
                 localPeerPort_ = "";
                 remotePeerPort_ = "";
-                cSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000001);
-                lSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000002);
-                sSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000004);
-                length_ = 0F;
                 used_ = false;
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = null;
-                } else {
-                    fiberUuid_ = null;
-                    fiberUuidBuilder_ = null;
-                }
+                internalGetMutableCSlots().clear();
+                internalGetMutableLSlots().clear();
+                internalGetMutableSSlots().clear();
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_Fiber_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
-                return context.ContextOuterClass.Fiber.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber build() {
-                context.ContextOuterClass.Fiber result = buildPartial();
+            public context.ContextOuterClass.OpticalLinkDetails build() {
+                context.ContextOuterClass.OpticalLinkDetails result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -76362,143 +77437,95 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.Fiber buildPartial() {
-                context.ContextOuterClass.Fiber result = new context.ContextOuterClass.Fiber(this);
-                int from_bitField0_ = bitField0_;
-                result.iD_ = iD_;
-                result.srcPort_ = srcPort_;
-                result.dstPort_ = dstPort_;
-                result.localPeerPort_ = localPeerPort_;
-                result.remotePeerPort_ = remotePeerPort_;
-                if (((bitField0_ & 0x00000001) != 0)) {
-                    cSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000001);
-                }
-                result.cSlots_ = cSlots_;
-                if (((bitField0_ & 0x00000002) != 0)) {
-                    lSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000002);
-                }
-                result.lSlots_ = lSlots_;
-                if (((bitField0_ & 0x00000004) != 0)) {
-                    sSlots_.makeImmutable();
-                    bitField0_ = (bitField0_ & ~0x00000004);
-                }
-                result.sSlots_ = sSlots_;
-                result.length_ = length_;
-                result.used_ = used_;
-                if (fiberUuidBuilder_ == null) {
-                    result.fiberUuid_ = fiberUuid_;
-                } else {
-                    result.fiberUuid_ = fiberUuidBuilder_.build();
+            public context.ContextOuterClass.OpticalLinkDetails buildPartial() {
+                context.ContextOuterClass.OpticalLinkDetails result = new context.ContextOuterClass.OpticalLinkDetails(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.OpticalLinkDetails result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.length_ = length_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.srcPort_ = srcPort_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.dstPort_ = dstPort_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.localPeerPort_ = localPeerPort_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.remotePeerPort_ = remotePeerPort_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.used_ = used_;
+                }
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.cSlots_ = internalGetCSlots();
+                    result.cSlots_.makeImmutable();
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.lSlots_ = internalGetLSlots();
+                    result.lSlots_.makeImmutable();
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.sSlots_ = internalGetSSlots();
+                    result.sSlots_.makeImmutable();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.Fiber) {
-                    return mergeFrom((context.ContextOuterClass.Fiber) other);
+                if (other instanceof context.ContextOuterClass.OpticalLinkDetails) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLinkDetails) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.Fiber other) {
-                if (other == context.ContextOuterClass.Fiber.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkDetails other) {
+                if (other == context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance())
                     return this;
-                if (!other.getID().isEmpty()) {
-                    iD_ = other.iD_;
-                    onChanged();
+                if (other.getLength() != 0F) {
+                    setLength(other.getLength());
                 }
                 if (!other.getSrcPort().isEmpty()) {
                     srcPort_ = other.srcPort_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getDstPort().isEmpty()) {
                     dstPort_ = other.dstPort_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (!other.getLocalPeerPort().isEmpty()) {
                     localPeerPort_ = other.localPeerPort_;
+                    bitField0_ |= 0x00000008;
                     onChanged();
                 }
                 if (!other.getRemotePeerPort().isEmpty()) {
                     remotePeerPort_ = other.remotePeerPort_;
+                    bitField0_ |= 0x00000010;
                     onChanged();
                 }
-                if (!other.cSlots_.isEmpty()) {
-                    if (cSlots_.isEmpty()) {
-                        cSlots_ = other.cSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000001);
-                    } else {
-                        ensureCSlotsIsMutable();
-                        cSlots_.addAll(other.cSlots_);
-                    }
-                    onChanged();
-                }
-                if (!other.lSlots_.isEmpty()) {
-                    if (lSlots_.isEmpty()) {
-                        lSlots_ = other.lSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000002);
-                    } else {
-                        ensureLSlotsIsMutable();
-                        lSlots_.addAll(other.lSlots_);
-                    }
-                    onChanged();
-                }
-                if (!other.sSlots_.isEmpty()) {
-                    if (sSlots_.isEmpty()) {
-                        sSlots_ = other.sSlots_;
-                        bitField0_ = (bitField0_ & ~0x00000004);
-                    } else {
-                        ensureSSlotsIsMutable();
-                        sSlots_.addAll(other.sSlots_);
-                    }
-                    onChanged();
-                }
-                if (other.getLength() != 0F) {
-                    setLength(other.getLength());
-                }
                 if (other.getUsed() != false) {
                     setUsed(other.getUsed());
                 }
-                if (other.hasFiberUuid()) {
-                    mergeFiberUuid(other.getFiberUuid());
-                }
-                this.mergeUnknownFields(other.unknownFields);
+                internalGetMutableCSlots().mergeFrom(other.internalGetCSlots());
+                bitField0_ |= 0x00000040;
+                internalGetMutableLSlots().mergeFrom(other.internalGetLSlots());
+                bitField0_ |= 0x00000080;
+                internalGetMutableSSlots().mergeFrom(other.internalGetSSlots());
+                bitField0_ |= 0x00000100;
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -76510,90 +77537,136 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.Fiber parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 13:
+                                {
+                                    length_ = input.readFloat();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 13
+                            case 18:
+                                {
+                                    srcPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    dstPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    localPeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    remotePeerPort_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            case 48:
+                                {
+                                    used_ = input.readBool();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 48
+                            case 58:
+                                {
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> cSlots__ = input.readMessage(CSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableCSlots().getMutableMap().put(cSlots__.getKey(), cSlots__.getValue());
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> lSlots__ = input.readMessage(LSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableLSlots().getMutableMap().put(lSlots__.getKey(), lSlots__.getValue());
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    com.google.protobuf.MapEntry<java.lang.String, java.lang.Integer> sSlots__ = input.readMessage(SSlotsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+                                    internalGetMutableSSlots().getMutableMap().put(sSlots__.getKey(), sSlots__.getValue());
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.Fiber) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
             private int bitField0_;
 
-            private java.lang.Object iD_ = "";
-
-            /**
-             * <code>string ID = 10;</code>
-             * @return The iD.
-             */
-            public java.lang.String getID() {
-                java.lang.Object ref = iD_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    iD_ = s;
-                    return s;
-                } else {
-                    return (java.lang.String) ref;
-                }
-            }
-
-            /**
-             * <code>string ID = 10;</code>
-             * @return The bytes for iD.
-             */
-            public com.google.protobuf.ByteString getIDBytes() {
-                java.lang.Object ref = iD_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    iD_ = b;
-                    return b;
-                } else {
-                    return (com.google.protobuf.ByteString) ref;
-                }
-            }
+            private float length_;
 
             /**
-             * <code>string ID = 10;</code>
-             * @param value The iD to set.
-             * @return This builder for chaining.
+             * <code>float length = 1;</code>
+             * @return The length.
              */
-            public Builder setID(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                iD_ = value;
-                onChanged();
-                return this;
+            @java.lang.Override
+            public float getLength() {
+                return length_;
             }
 
             /**
-             * <code>string ID = 10;</code>
+             * <code>float length = 1;</code>
+             * @param value The length to set.
              * @return This builder for chaining.
              */
-            public Builder clearID() {
-                iD_ = getDefaultInstance().getID();
+            public Builder setLength(float value) {
+                length_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string ID = 10;</code>
-             * @param value The bytes for iD to set.
+             * <code>float length = 1;</code>
              * @return This builder for chaining.
              */
-            public Builder setIDBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                checkByteStringIsUtf8(value);
-                iD_ = value;
+            public Builder clearLength() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                length_ = 0F;
                 onChanged();
                 return this;
             }
@@ -76601,7 +77674,7 @@ public final class ContextOuterClass {
             private java.lang.Object srcPort_ = "";
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return The srcPort.
              */
             public java.lang.String getSrcPort() {
@@ -76617,7 +77690,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return The bytes for srcPort.
              */
             public com.google.protobuf.ByteString getSrcPortBytes() {
@@ -76632,7 +77705,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @param value The srcPort to set.
              * @return This builder for chaining.
              */
@@ -76641,22 +77714,24 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 srcPort_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @return This builder for chaining.
              */
             public Builder clearSrcPort() {
                 srcPort_ = getDefaultInstance().getSrcPort();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string src_port = 1;</code>
+             * <code>string src_port = 2;</code>
              * @param value The bytes for srcPort to set.
              * @return This builder for chaining.
              */
@@ -76666,6 +77741,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 srcPort_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -76673,7 +77749,7 @@ public final class ContextOuterClass {
             private java.lang.Object dstPort_ = "";
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return The dstPort.
              */
             public java.lang.String getDstPort() {
@@ -76689,7 +77765,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return The bytes for dstPort.
              */
             public com.google.protobuf.ByteString getDstPortBytes() {
@@ -76704,7 +77780,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @param value The dstPort to set.
              * @return This builder for chaining.
              */
@@ -76713,22 +77789,24 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 dstPort_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @return This builder for chaining.
              */
             public Builder clearDstPort() {
                 dstPort_ = getDefaultInstance().getDstPort();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string dst_port = 2;</code>
+             * <code>string dst_port = 3;</code>
              * @param value The bytes for dstPort to set.
              * @return This builder for chaining.
              */
@@ -76738,6 +77816,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 dstPort_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -76745,7 +77824,7 @@ public final class ContextOuterClass {
             private java.lang.Object localPeerPort_ = "";
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return The localPeerPort.
              */
             public java.lang.String getLocalPeerPort() {
@@ -76761,7 +77840,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return The bytes for localPeerPort.
              */
             public com.google.protobuf.ByteString getLocalPeerPortBytes() {
@@ -76776,7 +77855,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @param value The localPeerPort to set.
              * @return This builder for chaining.
              */
@@ -76785,22 +77864,24 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 localPeerPort_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @return This builder for chaining.
              */
             public Builder clearLocalPeerPort() {
                 localPeerPort_ = getDefaultInstance().getLocalPeerPort();
+                bitField0_ = (bitField0_ & ~0x00000008);
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string local_peer_port = 3;</code>
+             * <code>string local_peer_port = 4;</code>
              * @param value The bytes for localPeerPort to set.
              * @return This builder for chaining.
              */
@@ -76810,6 +77891,7 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 localPeerPort_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -76817,7 +77899,7 @@ public final class ContextOuterClass {
             private java.lang.Object remotePeerPort_ = "";
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return The remotePeerPort.
              */
             public java.lang.String getRemotePeerPort() {
@@ -76833,7 +77915,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return The bytes for remotePeerPort.
              */
             public com.google.protobuf.ByteString getRemotePeerPortBytes() {
@@ -76848,7 +77930,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @param value The remotePeerPort to set.
              * @return This builder for chaining.
              */
@@ -76857,22 +77939,24 @@ public final class ContextOuterClass {
                     throw new NullPointerException();
                 }
                 remotePeerPort_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @return This builder for chaining.
              */
             public Builder clearRemotePeerPort() {
                 remotePeerPort_ = getDefaultInstance().getRemotePeerPort();
+                bitField0_ = (bitField0_ & ~0x00000010);
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string remote_peer_port = 4;</code>
+             * <code>string remote_peer_port = 5;</code>
              * @param value The bytes for remotePeerPort to set.
              * @return This builder for chaining.
              */
@@ -76882,432 +77966,424 @@ public final class ContextOuterClass {
                 }
                 checkByteStringIsUtf8(value);
                 remotePeerPort_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
 
-            private com.google.protobuf.Internal.IntList cSlots_ = emptyIntList();
-
-            private void ensureCSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
-                    cSlots_ = mutableCopy(cSlots_);
-                    bitField0_ |= 0x00000001;
-                }
-            }
-
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return A list containing the cSlots.
-             */
-            public java.util.List<java.lang.Integer> getCSlotsList() {
-                return ((bitField0_ & 0x00000001) != 0) ? java.util.Collections.unmodifiableList(cSlots_) : cSlots_;
-            }
-
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return The count of cSlots.
-             */
-            public int getCSlotsCount() {
-                return cSlots_.size();
-            }
+            private boolean used_;
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param index The index of the element to return.
-             * @return The cSlots at the given index.
+             * <code>bool used = 6;</code>
+             * @return The used.
              */
-            public int getCSlots(int index) {
-                return cSlots_.getInt(index);
+            @java.lang.Override
+            public boolean getUsed() {
+                return used_;
             }
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param index The index to set the value at.
-             * @param value The cSlots to set.
+             * <code>bool used = 6;</code>
+             * @param value The used to set.
              * @return This builder for chaining.
              */
-            public Builder setCSlots(int index, int value) {
-                ensureCSlotsIsMutable();
-                cSlots_.setInt(index, value);
+            public Builder setUsed(boolean value) {
+                used_ = value;
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param value The cSlots to add.
+             * <code>bool used = 6;</code>
              * @return This builder for chaining.
              */
-            public Builder addCSlots(int value) {
-                ensureCSlotsIsMutable();
-                cSlots_.addInt(value);
+            public Builder clearUsed() {
+                bitField0_ = (bitField0_ & ~0x00000020);
+                used_ = false;
                 onChanged();
                 return this;
             }
 
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @param values The cSlots to add.
-             * @return This builder for chaining.
-             */
-            public Builder addAllCSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureCSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, cSlots_);
-                onChanged();
-                return this;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> cSlots_;
+
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetCSlots() {
+                if (cSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(CSlotsDefaultEntryHolder.defaultEntry);
+                }
+                return cSlots_;
             }
 
-            /**
-             * <code>repeated int32 c_slots = 5;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearCSlots() {
-                cSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000001);
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableCSlots() {
+                if (cSlots_ == null) {
+                    cSlots_ = com.google.protobuf.MapField.newMapField(CSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!cSlots_.isMutable()) {
+                    cSlots_ = cSlots_.copy();
+                }
+                bitField0_ |= 0x00000040;
                 onChanged();
-                return this;
+                return cSlots_;
             }
 
-            private com.google.protobuf.Internal.IntList lSlots_ = emptyIntList();
+            public int getCSlotsCount() {
+                return internalGetCSlots().getMap().size();
+            }
 
-            private void ensureLSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000002) != 0)) {
-                    lSlots_ = mutableCopy(lSlots_);
-                    bitField0_ |= 0x00000002;
+            /**
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+             */
+            @java.lang.Override
+            public boolean containsCSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
+                return internalGetCSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return A list containing the lSlots.
+             * Use {@link #getCSlotsMap()} instead.
              */
-            public java.util.List<java.lang.Integer> getLSlotsList() {
-                return ((bitField0_ & 0x00000002) != 0) ? java.util.Collections.unmodifiableList(lSlots_) : lSlots_;
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getCSlots() {
+                return getCSlotsMap();
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return The count of lSlots.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public int getLSlotsCount() {
-                return lSlots_.size();
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getCSlotsMap() {
+                return internalGetCSlots().getMap();
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param index The index of the element to return.
-             * @return The lSlots at the given index.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public int getLSlots(int index) {
-                return lSlots_.getInt(index);
+            @java.lang.Override
+            public int getCSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param index The index to set the value at.
-             * @param value The lSlots to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder setLSlots(int index, int value) {
-                ensureLSlotsIsMutable();
-                lSlots_.setInt(index, value);
-                onChanged();
+            @java.lang.Override
+            public int getCSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetCSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
+                }
+                return map.get(key);
+            }
+
+            public Builder clearCSlots() {
+                bitField0_ = (bitField0_ & ~0x00000040);
+                internalGetMutableCSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param value The lSlots to add.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder addLSlots(int value) {
-                ensureLSlotsIsMutable();
-                lSlots_.addInt(value);
-                onChanged();
+            public Builder removeCSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableCSlots().getMutableMap().remove(key);
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @param values The lSlots to add.
-             * @return This builder for chaining.
+             * Use alternate mutation accessors instead.
              */
-            public Builder addAllLSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureLSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, lSlots_);
-                onChanged();
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableCSlots() {
+                bitField0_ |= 0x00000040;
+                return internalGetMutableCSlots().getMutableMap();
+            }
+
+            /**
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
+             */
+            public Builder putCSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableCSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000040;
                 return this;
             }
 
             /**
-             * <code>repeated int32 l_slots = 6;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; c_slots = 7;</code>
              */
-            public Builder clearLSlots() {
-                lSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000002);
-                onChanged();
+            public Builder putAllCSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableCSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000040;
                 return this;
             }
 
-            private com.google.protobuf.Internal.IntList sSlots_ = emptyIntList();
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> lSlots_;
 
-            private void ensureSSlotsIsMutable() {
-                if (!((bitField0_ & 0x00000004) != 0)) {
-                    sSlots_ = mutableCopy(sSlots_);
-                    bitField0_ |= 0x00000004;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetLSlots() {
+                if (lSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(LSlotsDefaultEntryHolder.defaultEntry);
                 }
+                return lSlots_;
             }
 
-            /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return A list containing the sSlots.
-             */
-            public java.util.List<java.lang.Integer> getSSlotsList() {
-                return ((bitField0_ & 0x00000004) != 0) ? java.util.Collections.unmodifiableList(sSlots_) : sSlots_;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableLSlots() {
+                if (lSlots_ == null) {
+                    lSlots_ = com.google.protobuf.MapField.newMapField(LSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!lSlots_.isMutable()) {
+                    lSlots_ = lSlots_.copy();
+                }
+                bitField0_ |= 0x00000080;
+                onChanged();
+                return lSlots_;
+            }
+
+            public int getLSlotsCount() {
+                return internalGetLSlots().getMap().size();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return The count of sSlots.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public int getSSlotsCount() {
-                return sSlots_.size();
+            @java.lang.Override
+            public boolean containsLSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                return internalGetLSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param index The index of the element to return.
-             * @return The sSlots at the given index.
+             * Use {@link #getLSlotsMap()} instead.
              */
-            public int getSSlots(int index) {
-                return sSlots_.getInt(index);
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getLSlots() {
+                return getLSlotsMap();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param index The index to set the value at.
-             * @param value The sSlots to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder setSSlots(int index, int value) {
-                ensureSSlotsIsMutable();
-                sSlots_.setInt(index, value);
-                onChanged();
-                return this;
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getLSlotsMap() {
+                return internalGetLSlots().getMap();
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param value The sSlots to add.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder addSSlots(int value) {
-                ensureSSlotsIsMutable();
-                sSlots_.addInt(value);
-                onChanged();
-                return this;
+            @java.lang.Override
+            public int getLSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @param values The sSlots to add.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder addAllSSlots(java.lang.Iterable<? extends java.lang.Integer> values) {
-                ensureSSlotsIsMutable();
-                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, sSlots_);
-                onChanged();
+            @java.lang.Override
+            public int getLSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetLSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
+                }
+                return map.get(key);
+            }
+
+            public Builder clearLSlots() {
+                bitField0_ = (bitField0_ & ~0x00000080);
+                internalGetMutableLSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>repeated int32 s_slots = 7;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder clearSSlots() {
-                sSlots_ = emptyIntList();
-                bitField0_ = (bitField0_ & ~0x00000004);
-                onChanged();
+            public Builder removeLSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableLSlots().getMutableMap().remove(key);
                 return this;
             }
 
-            private float length_;
-
             /**
-             * <code>float length = 8;</code>
-             * @return The length.
+             * Use alternate mutation accessors instead.
              */
-            @java.lang.Override
-            public float getLength() {
-                return length_;
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableLSlots() {
+                bitField0_ |= 0x00000080;
+                return internalGetMutableLSlots().getMutableMap();
             }
 
             /**
-             * <code>float length = 8;</code>
-             * @param value The length to set.
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder setLength(float value) {
-                length_ = value;
-                onChanged();
+            public Builder putLSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                internalGetMutableLSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000080;
                 return this;
             }
 
             /**
-             * <code>float length = 8;</code>
-             * @return This builder for chaining.
+             * <code>map&lt;string, int32&gt; l_slots = 8;</code>
              */
-            public Builder clearLength() {
-                length_ = 0F;
-                onChanged();
+            public Builder putAllLSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableLSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000080;
                 return this;
             }
 
-            private boolean used_;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> sSlots_;
 
-            /**
-             * <code>bool used = 9;</code>
-             * @return The used.
-             */
-            @java.lang.Override
-            public boolean getUsed() {
-                return used_;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetSSlots() {
+                if (sSlots_ == null) {
+                    return com.google.protobuf.MapField.emptyMapField(SSlotsDefaultEntryHolder.defaultEntry);
+                }
+                return sSlots_;
             }
 
-            /**
-             * <code>bool used = 9;</code>
-             * @param value The used to set.
-             * @return This builder for chaining.
-             */
-            public Builder setUsed(boolean value) {
-                used_ = value;
+            private com.google.protobuf.MapField<java.lang.String, java.lang.Integer> internalGetMutableSSlots() {
+                if (sSlots_ == null) {
+                    sSlots_ = com.google.protobuf.MapField.newMapField(SSlotsDefaultEntryHolder.defaultEntry);
+                }
+                if (!sSlots_.isMutable()) {
+                    sSlots_ = sSlots_.copy();
+                }
+                bitField0_ |= 0x00000100;
                 onChanged();
-                return this;
+                return sSlots_;
             }
 
-            /**
-             * <code>bool used = 9;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearUsed() {
-                used_ = false;
-                onChanged();
-                return this;
+            public int getSSlotsCount() {
+                return internalGetSSlots().getMap().size();
             }
 
-            private context.ContextOuterClass.FiberId fiberUuid_;
-
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> fiberUuidBuilder_;
-
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
-             * @return Whether the fiberUuid field is set.
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public boolean hasFiberUuid() {
-                return fiberUuidBuilder_ != null || fiberUuid_ != null;
+            @java.lang.Override
+            public boolean containsSSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                return internalGetSSlots().getMap().containsKey(key);
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
-             * @return The fiberUuid.
+             * Use {@link #getSSlotsMap()} instead.
              */
-            public context.ContextOuterClass.FiberId getFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
-                } else {
-                    return fiberUuidBuilder_.getMessage();
-                }
+            @java.lang.Override
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getSSlots() {
+                return getSSlotsMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.FiberId value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (value == null) {
-                        throw new NullPointerException();
-                    }
-                    fiberUuid_ = value;
-                    onChanged();
-                } else {
-                    fiberUuidBuilder_.setMessage(value);
-                }
-                return this;
+            @java.lang.Override
+            public java.util.Map<java.lang.String, java.lang.Integer> getSSlotsMap() {
+                return internalGetSSlots().getMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder setFiberUuid(context.ContextOuterClass.FiberId.Builder builderForValue) {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = builderForValue.build();
-                    onChanged();
-                } else {
-                    fiberUuidBuilder_.setMessage(builderForValue.build());
+            @java.lang.Override
+            public int getSSlotsOrDefault(java.lang.String key, int defaultValue) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
-                return this;
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+                return map.containsKey(key) ? map.get(key) : defaultValue;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder mergeFiberUuid(context.ContextOuterClass.FiberId value) {
-                if (fiberUuidBuilder_ == null) {
-                    if (fiberUuid_ != null) {
-                        fiberUuid_ = context.ContextOuterClass.FiberId.newBuilder(fiberUuid_).mergeFrom(value).buildPartial();
-                    } else {
-                        fiberUuid_ = value;
-                    }
-                    onChanged();
-                } else {
-                    fiberUuidBuilder_.mergeFrom(value);
+            @java.lang.Override
+            public int getSSlotsOrThrow(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
+                }
+                java.util.Map<java.lang.String, java.lang.Integer> map = internalGetSSlots().getMap();
+                if (!map.containsKey(key)) {
+                    throw new java.lang.IllegalArgumentException();
                 }
+                return map.get(key);
+            }
+
+            public Builder clearSSlots() {
+                bitField0_ = (bitField0_ & ~0x00000100);
+                internalGetMutableSSlots().getMutableMap().clear();
                 return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public Builder clearFiberUuid() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuid_ = null;
-                    onChanged();
-                } else {
-                    fiberUuid_ = null;
-                    fiberUuidBuilder_ = null;
+            public Builder removeSSlots(java.lang.String key) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
+                internalGetMutableSSlots().getMutableMap().remove(key);
                 return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * Use alternate mutation accessors instead.
              */
-            public context.ContextOuterClass.FiberId.Builder getFiberUuidBuilder() {
-                onChanged();
-                return getFiberUuidFieldBuilder().getBuilder();
+            @java.lang.Deprecated
+            public java.util.Map<java.lang.String, java.lang.Integer> getMutableSSlots() {
+                bitField0_ |= 0x00000100;
+                return internalGetMutableSSlots().getMutableMap();
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            public context.ContextOuterClass.FiberIdOrBuilder getFiberUuidOrBuilder() {
-                if (fiberUuidBuilder_ != null) {
-                    return fiberUuidBuilder_.getMessageOrBuilder();
-                } else {
-                    return fiberUuid_ == null ? context.ContextOuterClass.FiberId.getDefaultInstance() : fiberUuid_;
+            public Builder putSSlots(java.lang.String key, int value) {
+                if (key == null) {
+                    throw new NullPointerException("map key");
                 }
+                internalGetMutableSSlots().getMutableMap().put(key, value);
+                bitField0_ |= 0x00000100;
+                return this;
             }
 
             /**
-             * <code>.context.FiberId fiber_uuid = 11;</code>
+             * <code>map&lt;string, int32&gt; s_slots = 9;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder> getFiberUuidFieldBuilder() {
-                if (fiberUuidBuilder_ == null) {
-                    fiberUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.FiberId, context.ContextOuterClass.FiberId.Builder, context.ContextOuterClass.FiberIdOrBuilder>(getFiberUuid(), getParentForChildren(), isClean());
-                    fiberUuid_ = null;
-                }
-                return fiberUuidBuilder_;
+            public Builder putAllSSlots(java.util.Map<java.lang.String, java.lang.Integer> values) {
+                internalGetMutableSSlots().getMutableMap().putAll(values);
+                bitField0_ |= 0x00000100;
+                return this;
             }
 
             @java.lang.Override
@@ -77319,333 +78395,302 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.Fiber)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLinkDetails)
         }
 
-        // @@protoc_insertion_point(class_scope:context.Fiber)
-        private static final context.ContextOuterClass.Fiber DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLinkDetails)
+        private static final context.ContextOuterClass.OpticalLinkDetails DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.Fiber();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkDetails();
         }
 
-        public static context.ContextOuterClass.Fiber getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLinkDetails getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<Fiber> PARSER = new com.google.protobuf.AbstractParser<Fiber>() {
+        private static final com.google.protobuf.Parser<OpticalLinkDetails> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkDetails>() {
 
             @java.lang.Override
-            public Fiber parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Fiber(input, extensionRegistry);
+            public OpticalLinkDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<Fiber> parser() {
+        public static com.google.protobuf.Parser<OpticalLinkDetails> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<Fiber> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLinkDetails> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.Fiber getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkDetailsOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLinkDetails)
+    public interface OpticalLinkOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLink)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>float length = 1;</code>
-         * @return The length.
+         * <code>string name = 1;</code>
+         * @return The name.
          */
-        float getLength();
+        java.lang.String getName();
+
+        /**
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
+         */
+        com.google.protobuf.ByteString getNameBytes();
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return Whether the opticalDetails field is set.
+         */
+        boolean hasOpticalDetails();
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return The opticalDetails.
+         */
+        context.ContextOuterClass.OpticalLinkDetails getOpticalDetails();
 
         /**
-         * <code>string source = 2;</code>
-         * @return The source.
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
          */
-        java.lang.String getSource();
+        context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder();
 
         /**
-         * <code>string source = 2;</code>
-         * @return The bytes for source.
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return Whether the linkId field is set.
          */
-        com.google.protobuf.ByteString getSourceBytes();
+        boolean hasLinkId();
 
         /**
-         * <code>string target = 3;</code>
-         * @return The target.
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return The linkId.
          */
-        java.lang.String getTarget();
+        context.ContextOuterClass.LinkId getLinkId();
 
         /**
-         * <code>string target = 3;</code>
-         * @return The bytes for target.
+         * <code>.context.LinkId link_id = 3;</code>
          */
-        com.google.protobuf.ByteString getTargetBytes();
+        context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        java.util.List<context.ContextOuterClass.Fiber> getFibersList();
+        java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        context.ContextOuterClass.Fiber getFibers(int index);
+        context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        int getFibersCount();
+        int getLinkEndpointIdsCount();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList();
+        java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList();
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
-        context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index);
+        context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index);
     }
 
     /**
-     * Protobuf type {@code context.OpticalLinkDetails}
+     * Protobuf type {@code context.OpticalLink}
      */
-    public static final class OpticalLinkDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLinkDetails)
-    OpticalLinkDetailsOrBuilder {
+    public static final class OpticalLink extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLink)
+    OpticalLinkOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLinkDetails.newBuilder() to construct.
-        private OpticalLinkDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use OpticalLink.newBuilder() to construct.
+        private OpticalLink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLinkDetails() {
-            source_ = "";
-            target_ = "";
-            fibers_ = java.util.Collections.emptyList();
+        private OpticalLink() {
+            name_ = "";
+            linkEndpointIds_ = java.util.Collections.emptyList();
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLinkDetails();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private OpticalLinkDetails(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 13:
-                            {
-                                length_ = input.readFloat();
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                source_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                target_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    fibers_ = new java.util.ArrayList<context.ContextOuterClass.Fiber>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                fibers_.add(input.readMessage(context.ContextOuterClass.Fiber.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)) {
-                    fibers_ = java.util.Collections.unmodifiableList(fibers_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
+            return new OpticalLink();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+            return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
-        }
-
-        public static final int LENGTH_FIELD_NUMBER = 1;
-
-        private float length_;
-
-        /**
-         * <code>float length = 1;</code>
-         * @return The length.
-         */
-        @java.lang.Override
-        public float getLength() {
-            return length_;
+            return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
         }
 
-        public static final int SOURCE_FIELD_NUMBER = 2;
+        public static final int NAME_FIELD_NUMBER = 1;
 
-        private volatile java.lang.Object source_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
-         * <code>string source = 2;</code>
-         * @return The source.
+         * <code>string name = 1;</code>
+         * @return The name.
          */
         @java.lang.Override
-        public java.lang.String getSource() {
-            java.lang.Object ref = source_;
+        public java.lang.String getName() {
+            java.lang.Object ref = name_;
             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();
-                source_ = s;
+                name_ = s;
                 return s;
             }
         }
 
         /**
-         * <code>string source = 2;</code>
-         * @return The bytes for source.
+         * <code>string name = 1;</code>
+         * @return The bytes for name.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getSourceBytes() {
-            java.lang.Object ref = source_;
+        public com.google.protobuf.ByteString getNameBytes() {
+            java.lang.Object ref = name_;
             if (ref instanceof java.lang.String) {
                 com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                source_ = b;
+                name_ = b;
                 return b;
             } else {
                 return (com.google.protobuf.ByteString) ref;
             }
         }
 
-        public static final int TARGET_FIELD_NUMBER = 3;
+        public static final int OPTICAL_DETAILS_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object target_;
+        private context.ContextOuterClass.OpticalLinkDetails opticalDetails_;
 
         /**
-         * <code>string target = 3;</code>
-         * @return The target.
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return Whether the opticalDetails field is set.
          */
         @java.lang.Override
-        public java.lang.String getTarget() {
-            java.lang.Object ref = target_;
-            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();
-                target_ = s;
-                return s;
-            }
+        public boolean hasOpticalDetails() {
+            return opticalDetails_ != null;
         }
 
         /**
-         * <code>string target = 3;</code>
-         * @return The bytes for target.
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         * @return The opticalDetails.
          */
         @java.lang.Override
-        public com.google.protobuf.ByteString getTargetBytes() {
-            java.lang.Object ref = target_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                target_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+        public context.ContextOuterClass.OpticalLinkDetails getOpticalDetails() {
+            return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
+        }
+
+        /**
+         * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder() {
+            return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
+        }
+
+        public static final int LINK_ID_FIELD_NUMBER = 3;
+
+        private context.ContextOuterClass.LinkId linkId_;
+
+        /**
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return Whether the linkId field is set.
+         */
+        @java.lang.Override
+        public boolean hasLinkId() {
+            return linkId_ != null;
+        }
+
+        /**
+         * <code>.context.LinkId link_id = 3;</code>
+         * @return The linkId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkId getLinkId() {
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
 
-        public static final int FIBERS_FIELD_NUMBER = 4;
+        /**
+         * <code>.context.LinkId link_id = 3;</code>
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        }
 
-        private java.util.List<context.ContextOuterClass.Fiber> fibers_;
+        public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
-            return fibers_;
+        public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+            return linkEndpointIds_;
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
-            return fibers_;
+        public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
+            return linkEndpointIds_;
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public int getFibersCount() {
-            return fibers_.size();
+        public int getLinkEndpointIdsCount() {
+            return linkEndpointIds_.size();
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.Fiber getFibers(int index) {
-            return fibers_.get(index);
+        public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+            return linkEndpointIds_.get(index);
         }
 
         /**
-         * <code>repeated .context.Fiber fibers = 4;</code>
+         * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
-            return fibers_.get(index);
+        public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
+            return linkEndpointIds_.get(index);
         }
 
         private byte memoizedIsInitialized = -1;
@@ -77663,19 +78708,19 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (length_ != 0F) {
-                output.writeFloat(1, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
             }
-            if (!getSourceBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, source_);
+            if (opticalDetails_ != null) {
+                output.writeMessage(2, getOpticalDetails());
             }
-            if (!getTargetBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, target_);
+            if (linkId_ != null) {
+                output.writeMessage(3, getLinkId());
             }
-            for (int i = 0; i < fibers_.size(); i++) {
-                output.writeMessage(4, fibers_.get(i));
+            for (int i = 0; i < linkEndpointIds_.size(); i++) {
+                output.writeMessage(4, linkEndpointIds_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -77684,19 +78729,19 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (length_ != 0F) {
-                size += com.google.protobuf.CodedOutputStream.computeFloatSize(1, length_);
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
             }
-            if (!getSourceBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, source_);
+            if (opticalDetails_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getOpticalDetails());
             }
-            if (!getTargetBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, target_);
+            if (linkId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getLinkId());
             }
-            for (int i = 0; i < fibers_.size(); i++) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, fibers_.get(i));
+            for (int i = 0; i < linkEndpointIds_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, linkEndpointIds_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -77706,19 +78751,27 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLinkDetails)) {
+            if (!(obj instanceof context.ContextOuterClass.OpticalLink)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLinkDetails other = (context.ContextOuterClass.OpticalLinkDetails) obj;
-            if (java.lang.Float.floatToIntBits(getLength()) != java.lang.Float.floatToIntBits(other.getLength()))
+            context.ContextOuterClass.OpticalLink other = (context.ContextOuterClass.OpticalLink) obj;
+            if (!getName().equals(other.getName()))
                 return false;
-            if (!getSource().equals(other.getSource()))
+            if (hasOpticalDetails() != other.hasOpticalDetails())
                 return false;
-            if (!getTarget().equals(other.getTarget()))
+            if (hasOpticalDetails()) {
+                if (!getOpticalDetails().equals(other.getOpticalDetails()))
+                    return false;
+            }
+            if (hasLinkId() != other.hasLinkId())
                 return false;
-            if (!getFibersList().equals(other.getFibersList()))
+            if (hasLinkId()) {
+                if (!getLinkId().equals(other.getLinkId()))
+                    return false;
+            }
+            if (!getLinkEndpointIdsList().equals(other.getLinkEndpointIdsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -77730,66 +78783,70 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + LENGTH_FIELD_NUMBER;
-            hash = (53 * hash) + java.lang.Float.floatToIntBits(getLength());
-            hash = (37 * hash) + SOURCE_FIELD_NUMBER;
-            hash = (53 * hash) + getSource().hashCode();
-            hash = (37 * hash) + TARGET_FIELD_NUMBER;
-            hash = (53 * hash) + getTarget().hashCode();
-            if (getFibersCount() > 0) {
-                hash = (37 * hash) + FIBERS_FIELD_NUMBER;
-                hash = (53 * hash) + getFibersList().hashCode();
-            }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (37 * hash) + NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getName().hashCode();
+            if (hasOpticalDetails()) {
+                hash = (37 * hash) + OPTICAL_DETAILS_FIELD_NUMBER;
+                hash = (53 * hash) + getOpticalDetails().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) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink 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.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -77802,7 +78859,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLinkDetails prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.OpticalLink prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -77818,64 +78875,66 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLinkDetails}
+         * Protobuf type {@code context.OpticalLink}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLinkDetails)
-        context.ContextOuterClass.OpticalLinkDetailsOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLink)
+        context.ContextOuterClass.OpticalLinkOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLinkDetails.class, context.ContextOuterClass.OpticalLinkDetails.Builder.class);
+                return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLinkDetails.newBuilder()
+            // Construct using context.ContextOuterClass.OpticalLink.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getFibersFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                length_ = 0F;
-                source_ = "";
-                target_ = "";
-                if (fibersBuilder_ == null) {
-                    fibers_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                bitField0_ = 0;
+                name_ = "";
+                opticalDetails_ = null;
+                if (opticalDetailsBuilder_ != null) {
+                    opticalDetailsBuilder_.dispose();
+                    opticalDetailsBuilder_ = null;
+                }
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
+                    linkIdBuilder_ = null;
+                }
+                if (linkEndpointIdsBuilder_ == null) {
+                    linkEndpointIds_ = java.util.Collections.emptyList();
                 } else {
-                    fibersBuilder_.clear();
+                    linkEndpointIds_ = null;
+                    linkEndpointIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000008);
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLinkDetails_descriptor;
+                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance();
+            public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+                return context.ContextOuterClass.OpticalLink.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails build() {
-                context.ContextOuterClass.OpticalLinkDetails result = buildPartial();
+            public context.ContextOuterClass.OpticalLink build() {
+                context.ContextOuterClass.OpticalLink result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -77883,104 +78942,90 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLinkDetails buildPartial() {
-                context.ContextOuterClass.OpticalLinkDetails result = new context.ContextOuterClass.OpticalLinkDetails(this);
-                int from_bitField0_ = bitField0_;
-                result.length_ = length_;
-                result.source_ = source_;
-                result.target_ = target_;
-                if (fibersBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
-                        fibers_ = java.util.Collections.unmodifiableList(fibers_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
-                    }
-                    result.fibers_ = fibers_;
-                } else {
-                    result.fibers_ = fibersBuilder_.build();
+            public context.ContextOuterClass.OpticalLink buildPartial() {
+                context.ContextOuterClass.OpticalLink result = new context.ContextOuterClass.OpticalLink(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartialRepeatedFields(context.ContextOuterClass.OpticalLink result) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000008) != 0)) {
+                        linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+                        bitField0_ = (bitField0_ & ~0x00000008);
+                    }
+                    result.linkEndpointIds_ = linkEndpointIds_;
+                } else {
+                    result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
+                }
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartial0(context.ContextOuterClass.OpticalLink result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.opticalDetails_ = opticalDetailsBuilder_ == null ? opticalDetails_ : opticalDetailsBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.linkId_ = linkIdBuilder_ == null ? linkId_ : linkIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLinkDetails) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLinkDetails) other);
+                if (other instanceof context.ContextOuterClass.OpticalLink) {
+                    return mergeFrom((context.ContextOuterClass.OpticalLink) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLinkDetails other) {
-                if (other == context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.OpticalLink other) {
+                if (other == context.ContextOuterClass.OpticalLink.getDefaultInstance())
                     return this;
-                if (other.getLength() != 0F) {
-                    setLength(other.getLength());
-                }
-                if (!other.getSource().isEmpty()) {
-                    source_ = other.source_;
+                if (!other.getName().isEmpty()) {
+                    name_ = other.name_;
+                    bitField0_ |= 0x00000001;
                     onChanged();
                 }
-                if (!other.getTarget().isEmpty()) {
-                    target_ = other.target_;
-                    onChanged();
+                if (other.hasOpticalDetails()) {
+                    mergeOpticalDetails(other.getOpticalDetails());
                 }
-                if (fibersBuilder_ == null) {
-                    if (!other.fibers_.isEmpty()) {
-                        if (fibers_.isEmpty()) {
-                            fibers_ = other.fibers_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                if (other.hasLinkId()) {
+                    mergeLinkId(other.getLinkId());
+                }
+                if (linkEndpointIdsBuilder_ == null) {
+                    if (!other.linkEndpointIds_.isEmpty()) {
+                        if (linkEndpointIds_.isEmpty()) {
+                            linkEndpointIds_ = other.linkEndpointIds_;
+                            bitField0_ = (bitField0_ & ~0x00000008);
                         } else {
-                            ensureFibersIsMutable();
-                            fibers_.addAll(other.fibers_);
+                            ensureLinkEndpointIdsIsMutable();
+                            linkEndpointIds_.addAll(other.linkEndpointIds_);
                         }
                         onChanged();
                     }
                 } else {
-                    if (!other.fibers_.isEmpty()) {
-                        if (fibersBuilder_.isEmpty()) {
-                            fibersBuilder_.dispose();
-                            fibersBuilder_ = null;
-                            fibers_ = other.fibers_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
-                            fibersBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getFibersFieldBuilder() : null;
+                    if (!other.linkEndpointIds_.isEmpty()) {
+                        if (linkEndpointIdsBuilder_.isEmpty()) {
+                            linkEndpointIdsBuilder_.dispose();
+                            linkEndpointIdsBuilder_ = null;
+                            linkEndpointIds_ = other.linkEndpointIds_;
+                            bitField0_ = (bitField0_ & ~0x00000008);
+                            linkEndpointIdsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getLinkEndpointIdsFieldBuilder() : null;
                         } else {
-                            fibersBuilder_.addAllMessages(other.fibers_);
+                            linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -77992,433 +79037,619 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalLinkDetails parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getOpticalDetailsFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getLinkIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    context.ContextOuterClass.EndPointId m = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+                                    if (linkEndpointIdsBuilder_ == null) {
+                                        ensureLinkEndpointIdsIsMutable();
+                                        linkEndpointIds_.add(m);
+                                    } else {
+                                        linkEndpointIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalLinkDetails) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
             private int bitField0_;
 
-            private float length_;
+            private java.lang.Object name_ = "";
 
             /**
-             * <code>float length = 1;</code>
-             * @return The length.
+             * <code>string name = 1;</code>
+             * @return The name.
              */
-            @java.lang.Override
-            public float getLength() {
-                return length_;
+            public java.lang.String getName() {
+                java.lang.Object ref = name_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    name_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
             }
 
             /**
-             * <code>float length = 1;</code>
-             * @param value The length to set.
+             * <code>string name = 1;</code>
+             * @return The bytes for name.
+             */
+            public com.google.protobuf.ByteString getNameBytes() {
+                java.lang.Object ref = name_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    name_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @param value The name to set.
              * @return This builder for chaining.
              */
-            public Builder setLength(float value) {
-                length_ = value;
+            public Builder setName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                name_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>float length = 1;</code>
+             * <code>string name = 1;</code>
              * @return This builder for chaining.
              */
-            public Builder clearLength() {
-                length_ = 0F;
+            public Builder clearName() {
+                name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string name = 1;</code>
+             * @param value The bytes for name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                name_ = value;
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
 
-            private java.lang.Object source_ = "";
+            private context.ContextOuterClass.OpticalLinkDetails opticalDetails_;
+
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> opticalDetailsBuilder_;
 
             /**
-             * <code>string source = 2;</code>
-             * @return The source.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             * @return Whether the opticalDetails field is set.
              */
-            public java.lang.String getSource() {
-                java.lang.Object ref = source_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    source_ = s;
-                    return s;
+            public boolean hasOpticalDetails() {
+                return ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             * @return The opticalDetails.
+             */
+            public context.ContextOuterClass.OpticalLinkDetails getOpticalDetails() {
+                if (opticalDetailsBuilder_ == null) {
+                    return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
                 } else {
-                    return (java.lang.String) ref;
+                    return opticalDetailsBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @return The bytes for source.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public com.google.protobuf.ByteString getSourceBytes() {
-                java.lang.Object ref = source_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    source_ = b;
-                    return b;
+            public Builder setOpticalDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (opticalDetailsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    opticalDetails_ = value;
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    opticalDetailsBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @param value The source to set.
-             * @return This builder for chaining.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public Builder setSource(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder setOpticalDetails(context.ContextOuterClass.OpticalLinkDetails.Builder builderForValue) {
+                if (opticalDetailsBuilder_ == null) {
+                    opticalDetails_ = builderForValue.build();
+                } else {
+                    opticalDetailsBuilder_.setMessage(builderForValue.build());
                 }
-                source_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @return This builder for chaining.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public Builder clearSource() {
-                source_ = getDefaultInstance().getSource();
+            public Builder mergeOpticalDetails(context.ContextOuterClass.OpticalLinkDetails value) {
+                if (opticalDetailsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && opticalDetails_ != null && opticalDetails_ != context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance()) {
+                        getOpticalDetailsBuilder().mergeFrom(value);
+                    } else {
+                        opticalDetails_ = value;
+                    }
+                } else {
+                    opticalDetailsBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string source = 2;</code>
-             * @param value The bytes for source to set.
-             * @return This builder for chaining.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public Builder setSourceBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder clearOpticalDetails() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                opticalDetails_ = null;
+                if (opticalDetailsBuilder_ != null) {
+                    opticalDetailsBuilder_.dispose();
+                    opticalDetailsBuilder_ = null;
                 }
-                checkByteStringIsUtf8(value);
-                source_ = value;
                 onChanged();
                 return this;
             }
 
-            private java.lang.Object target_ = "";
+            /**
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
+             */
+            public context.ContextOuterClass.OpticalLinkDetails.Builder getOpticalDetailsBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getOpticalDetailsFieldBuilder().getBuilder();
+            }
 
             /**
-             * <code>string target = 3;</code>
-             * @return The target.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public java.lang.String getTarget() {
-                java.lang.Object ref = target_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    target_ = s;
-                    return s;
+            public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getOpticalDetailsOrBuilder() {
+                if (opticalDetailsBuilder_ != null) {
+                    return opticalDetailsBuilder_.getMessageOrBuilder();
                 } else {
-                    return (java.lang.String) ref;
+                    return opticalDetails_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : opticalDetails_;
                 }
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @return The bytes for target.
+             * <code>.context.OpticalLinkDetails optical_details = 2;</code>
              */
-            public com.google.protobuf.ByteString getTargetBytes() {
-                java.lang.Object ref = target_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    target_ = b;
-                    return b;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> getOpticalDetailsFieldBuilder() {
+                if (opticalDetailsBuilder_ == null) {
+                    opticalDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder>(getOpticalDetails(), getParentForChildren(), isClean());
+                    opticalDetails_ = null;
+                }
+                return opticalDetailsBuilder_;
+            }
+
+            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 = 3;</code>
+             * @return Whether the linkId field is set.
+             */
+            public boolean hasLinkId() {
+                return ((bitField0_ & 0x00000004) != 0);
+            }
+
+            /**
+             * <code>.context.LinkId link_id = 3;</code>
+             * @return The linkId.
+             */
+            public context.ContextOuterClass.LinkId getLinkId() {
+                if (linkIdBuilder_ == null) {
+                    return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
                 } else {
-                    return (com.google.protobuf.ByteString) ref;
+                    return linkIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @param value The target to set.
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder setTarget(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+                if (linkIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    linkId_ = value;
+                } else {
+                    linkIdBuilder_.setMessage(value);
                 }
-                target_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder clearTarget() {
-                target_ = getDefaultInstance().getTarget();
+            public Builder setLinkId(context.ContextOuterClass.LinkId.Builder builderForValue) {
+                if (linkIdBuilder_ == null) {
+                    linkId_ = builderForValue.build();
+                } else {
+                    linkIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * <code>string target = 3;</code>
-             * @param value The bytes for target to set.
-             * @return This builder for chaining.
+             * <code>.context.LinkId link_id = 3;</code>
              */
-            public Builder setTargetBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
+            public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+                if (linkIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000004) != 0) && linkId_ != null && linkId_ != context.ContextOuterClass.LinkId.getDefaultInstance()) {
+                        getLinkIdBuilder().mergeFrom(value);
+                    } else {
+                        linkId_ = value;
+                    }
+                } else {
+                    linkIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>.context.LinkId link_id = 3;</code>
+             */
+            public Builder clearLinkId() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
+                    linkIdBuilder_ = null;
                 }
-                checkByteStringIsUtf8(value);
-                target_ = value;
                 onChanged();
                 return this;
             }
 
-            private java.util.List<context.ContextOuterClass.Fiber> fibers_ = java.util.Collections.emptyList();
+            /**
+             * <code>.context.LinkId link_id = 3;</code>
+             */
+            public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return getLinkIdFieldBuilder().getBuilder();
+            }
 
-            private void ensureFibersIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
-                    fibers_ = new java.util.ArrayList<context.ContextOuterClass.Fiber>(fibers_);
-                    bitField0_ |= 0x00000001;
+            /**
+             * <code>.context.LinkId link_id = 3;</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 = 3;</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_ & 0x00000008) != 0)) {
+                    linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+                    bitField0_ |= 0x00000008;
                 }
             }
 
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> fibersBuilder_;
+            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<context.ContextOuterClass.Fiber> getFibersList() {
-                if (fibersBuilder_ == null) {
-                    return java.util.Collections.unmodifiableList(fibers_);
+            public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(linkEndpointIds_);
                 } else {
-                    return fibersBuilder_.getMessageList();
+                    return linkEndpointIdsBuilder_.getMessageList();
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public int getFibersCount() {
-                if (fibersBuilder_ == null) {
-                    return fibers_.size();
+            public int getLinkEndpointIdsCount() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.size();
                 } else {
-                    return fibersBuilder_.getCount();
+                    return linkEndpointIdsBuilder_.getCount();
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber getFibers(int index) {
-                if (fibersBuilder_ == null) {
-                    return fibers_.get(index);
+            public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.get(index);
                 } else {
-                    return fibersBuilder_.getMessage(index);
+                    return linkEndpointIdsBuilder_.getMessage(index);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder setFibers(int index, context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.set(index, value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.set(index, value);
                     onChanged();
                 } else {
-                    fibersBuilder_.setMessage(index, value);
+                    linkEndpointIdsBuilder_.setMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder setFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.set(index, builderForValue.build());
+            public Builder setLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.set(index, builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.setMessage(index, builderForValue.build());
+                    linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.add(value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(value);
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(value);
+                    linkEndpointIdsBuilder_.addMessage(value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(int index, context.ContextOuterClass.Fiber value) {
-                if (fibersBuilder_ == null) {
+            public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId value) {
+                if (linkEndpointIdsBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    ensureFibersIsMutable();
-                    fibers_.add(index, value);
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(index, value);
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(index, value);
+                    linkEndpointIdsBuilder_.addMessage(index, value);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.add(builderForValue.build());
+            public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(builderForValue.build());
+                    linkEndpointIdsBuilder_.addMessage(builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addFibers(int index, context.ContextOuterClass.Fiber.Builder builderForValue) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.add(index, builderForValue.build());
+            public Builder addLinkEndpointIds(int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.add(index, builderForValue.build());
                     onChanged();
                 } else {
-                    fibersBuilder_.addMessage(index, builderForValue.build());
+                    linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder addAllFibers(java.lang.Iterable<? extends context.ContextOuterClass.Fiber> values) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, fibers_);
+            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 {
-                    fibersBuilder_.addAllMessages(values);
+                    linkEndpointIdsBuilder_.addAllMessages(values);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder clearFibers() {
-                if (fibersBuilder_ == null) {
-                    fibers_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+            public Builder clearLinkEndpointIds() {
+                if (linkEndpointIdsBuilder_ == null) {
+                    linkEndpointIds_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000008);
                     onChanged();
                 } else {
-                    fibersBuilder_.clear();
+                    linkEndpointIdsBuilder_.clear();
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public Builder removeFibers(int index) {
-                if (fibersBuilder_ == null) {
-                    ensureFibersIsMutable();
-                    fibers_.remove(index);
+            public Builder removeLinkEndpointIds(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    ensureLinkEndpointIdsIsMutable();
+                    linkEndpointIds_.remove(index);
                     onChanged();
                 } else {
-                    fibersBuilder_.remove(index);
+                    linkEndpointIdsBuilder_.remove(index);
                 }
                 return this;
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder getFibersBuilder(int index) {
-                return getFibersFieldBuilder().getBuilder(index);
+            public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(int index) {
+                return getLinkEndpointIdsFieldBuilder().getBuilder(index);
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.FiberOrBuilder getFibersOrBuilder(int index) {
-                if (fibersBuilder_ == null) {
-                    return fibers_.get(index);
+            public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(int index) {
+                if (linkEndpointIdsBuilder_ == null) {
+                    return linkEndpointIds_.get(index);
                 } else {
-                    return fibersBuilder_.getMessageOrBuilder(index);
+                    return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<? extends context.ContextOuterClass.FiberOrBuilder> getFibersOrBuilderList() {
-                if (fibersBuilder_ != null) {
-                    return fibersBuilder_.getMessageOrBuilderList();
+            public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> getLinkEndpointIdsOrBuilderList() {
+                if (linkEndpointIdsBuilder_ != null) {
+                    return linkEndpointIdsBuilder_.getMessageOrBuilderList();
                 } else {
-                    return java.util.Collections.unmodifiableList(fibers_);
+                    return java.util.Collections.unmodifiableList(linkEndpointIds_);
                 }
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder addFibersBuilder() {
-                return getFibersFieldBuilder().addBuilder(context.ContextOuterClass.Fiber.getDefaultInstance());
+            public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+                return getLinkEndpointIdsFieldBuilder().addBuilder(context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public context.ContextOuterClass.Fiber.Builder addFibersBuilder(int index) {
-                return getFibersFieldBuilder().addBuilder(index, context.ContextOuterClass.Fiber.getDefaultInstance());
+            public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(int index) {
+                return getLinkEndpointIdsFieldBuilder().addBuilder(index, context.ContextOuterClass.EndPointId.getDefaultInstance());
             }
 
             /**
-             * <code>repeated .context.Fiber fibers = 4;</code>
+             * <code>repeated .context.EndPointId link_endpoint_ids = 4;</code>
              */
-            public java.util.List<context.ContextOuterClass.Fiber.Builder> getFibersBuilderList() {
-                return getFibersFieldBuilder().getBuilderList();
+            public java.util.List<context.ContextOuterClass.EndPointId.Builder> getLinkEndpointIdsBuilderList() {
+                return getLinkEndpointIdsFieldBuilder().getBuilderList();
             }
 
-            private com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder> getFibersFieldBuilder() {
-                if (fibersBuilder_ == null) {
-                    fibersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<context.ContextOuterClass.Fiber, context.ContextOuterClass.Fiber.Builder, context.ContextOuterClass.FiberOrBuilder>(fibers_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
-                    fibers_ = null;
+            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_ & 0x00000008) != 0), getParentForChildren(), isClean());
+                    linkEndpointIds_ = null;
                 }
-                return fibersBuilder_;
+                return linkEndpointIdsBuilder_;
             }
 
             @java.lang.Override
@@ -78430,290 +79661,180 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLinkDetails)
+            // @@protoc_insertion_point(builder_scope:context.OpticalLink)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLinkDetails)
-        private static final context.ContextOuterClass.OpticalLinkDetails DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.OpticalLink)
+        private static final context.ContextOuterClass.OpticalLink DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLinkDetails();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLink();
         }
 
-        public static context.ContextOuterClass.OpticalLinkDetails getDefaultInstance() {
+        public static context.ContextOuterClass.OpticalLink getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLinkDetails> PARSER = new com.google.protobuf.AbstractParser<OpticalLinkDetails>() {
+        private static final com.google.protobuf.Parser<OpticalLink> PARSER = new com.google.protobuf.AbstractParser<OpticalLink>() {
 
             @java.lang.Override
-            public OpticalLinkDetails parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalLinkDetails(input, extensionRegistry);
+            public OpticalLink parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLinkDetails> parser() {
+        public static com.google.protobuf.Parser<OpticalLink> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLinkDetails> getParserForType() {
+        public com.google.protobuf.Parser<OpticalLink> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetails getDefaultInstanceForType() {
+        public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
 
-    public interface OpticalLinkOrBuilder extends // @@protoc_insertion_point(interface_extends:context.OpticalLink)
+    public interface ServiceConfigRuleOrBuilder extends // @@protoc_insertion_point(interface_extends:context.ServiceConfigRule)
     com.google.protobuf.MessageOrBuilder {
 
         /**
-         * <code>string name = 1;</code>
-         * @return The name.
-         */
-        java.lang.String getName();
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The bytes for name.
-         */
-        com.google.protobuf.ByteString getNameBytes();
-
-        /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return Whether the details field is set.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return Whether the serviceId field is set.
          */
-        boolean hasDetails();
+        boolean hasServiceId();
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return The details.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return The serviceId.
          */
-        context.ContextOuterClass.OpticalLinkDetails getDetails();
+        context.ContextOuterClass.ServiceId getServiceId();
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * <code>.context.ServiceId service_id = 1;</code>
          */
-        context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder();
+        context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return Whether the configruleCustom field is set.
          */
-        boolean hasOpticalLinkUuid();
+        boolean hasConfigruleCustom();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return The configruleCustom.
          */
-        context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid();
+        context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom();
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
          */
-        context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder();
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder();
     }
 
     /**
-     * Protobuf type {@code context.OpticalLink}
+     * Protobuf type {@code context.ServiceConfigRule}
      */
-    public static final class OpticalLink extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.OpticalLink)
-    OpticalLinkOrBuilder {
+    public static final class ServiceConfigRule extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.ServiceConfigRule)
+    ServiceConfigRuleOrBuilder {
 
         private static final long serialVersionUID = 0L;
 
-        // Use OpticalLink.newBuilder() to construct.
-        private OpticalLink(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use ServiceConfigRule.newBuilder() to construct.
+        private ServiceConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private OpticalLink() {
-            name_ = "";
+        private ServiceConfigRule() {
         }
 
         @java.lang.Override
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new OpticalLink();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private OpticalLink(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();
-                                name_ = s;
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.OpticalLinkDetails.Builder subBuilder = null;
-                                if (details_ != null) {
-                                    subBuilder = details_.toBuilder();
-                                }
-                                details_ = input.readMessage(context.ContextOuterClass.OpticalLinkDetails.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(details_);
-                                    details_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 26:
-                            {
-                                context.ContextOuterClass.OpticalLinkId.Builder subBuilder = null;
-                                if (opticalLinkUuid_ != null) {
-                                    subBuilder = opticalLinkUuid_.toBuilder();
-                                }
-                                opticalLinkUuid_ = input.readMessage(context.ContextOuterClass.OpticalLinkId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(opticalLinkUuid_);
-                                    opticalLinkUuid_ = 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();
-            }
+            return new ServiceConfigRule();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-            return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+            return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
-        }
-
-        public static final int NAME_FIELD_NUMBER = 1;
-
-        private volatile java.lang.Object name_;
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The name.
-         */
-        @java.lang.Override
-        public java.lang.String getName() {
-            java.lang.Object ref = name_;
-            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();
-                name_ = s;
-                return s;
-            }
-        }
-
-        /**
-         * <code>string name = 1;</code>
-         * @return The bytes for name.
-         */
-        @java.lang.Override
-        public com.google.protobuf.ByteString getNameBytes() {
-            java.lang.Object ref = name_;
-            if (ref instanceof java.lang.String) {
-                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                name_ = b;
-                return b;
-            } else {
-                return (com.google.protobuf.ByteString) ref;
-            }
+            return context.ContextOuterClass.internal_static_context_ServiceConfigRule_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ServiceConfigRule.class, context.ContextOuterClass.ServiceConfigRule.Builder.class);
         }
 
-        public static final int DETAILS_FIELD_NUMBER = 2;
+        public static final int SERVICE_ID_FIELD_NUMBER = 1;
 
-        private context.ContextOuterClass.OpticalLinkDetails details_;
+        private context.ContextOuterClass.ServiceId serviceId_;
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return Whether the details field is set.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return Whether the serviceId field is set.
          */
         @java.lang.Override
-        public boolean hasDetails() {
-            return details_ != null;
+        public boolean hasServiceId() {
+            return serviceId_ != null;
         }
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
-         * @return The details.
+         * <code>.context.ServiceId service_id = 1;</code>
+         * @return The serviceId.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetails getDetails() {
-            return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+        public context.ContextOuterClass.ServiceId getServiceId() {
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         /**
-         * <code>.context.OpticalLinkDetails details = 2;</code>
+         * <code>.context.ServiceId service_id = 1;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
-            return getDetails();
+        public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
-        public static final int OPTICAL_LINK_UUID_FIELD_NUMBER = 3;
+        public static final int CONFIGRULE_CUSTOM_FIELD_NUMBER = 2;
 
-        private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+        private context.ContextOuterClass.ConfigRule_Custom configruleCustom_;
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return Whether the opticalLinkUuid field is set.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return Whether the configruleCustom field is set.
          */
         @java.lang.Override
-        public boolean hasOpticalLinkUuid() {
-            return opticalLinkUuid_ != null;
+        public boolean hasConfigruleCustom() {
+            return configruleCustom_ != null;
         }
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-         * @return The opticalLinkUuid.
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+         * @return The configruleCustom.
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
-            return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+        public context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom() {
+            return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
         }
 
         /**
-         * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+         * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
          */
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
-            return getOpticalLinkUuid();
+        public context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder() {
+            return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -78731,16 +79852,13 @@ public final class ContextOuterClass {
 
         @java.lang.Override
         public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
-            if (!getNameBytes().isEmpty()) {
-                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
-            }
-            if (details_ != null) {
-                output.writeMessage(2, getDetails());
+            if (serviceId_ != null) {
+                output.writeMessage(1, getServiceId());
             }
-            if (opticalLinkUuid_ != null) {
-                output.writeMessage(3, getOpticalLinkUuid());
+            if (configruleCustom_ != null) {
+                output.writeMessage(2, getConfigruleCustom());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -78749,16 +79867,13 @@ public final class ContextOuterClass {
             if (size != -1)
                 return size;
             size = 0;
-            if (!getNameBytes().isEmpty()) {
-                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
-            }
-            if (details_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDetails());
+            if (serviceId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getServiceId());
             }
-            if (opticalLinkUuid_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getOpticalLinkUuid());
+            if (configruleCustom_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getConfigruleCustom());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -78768,25 +79883,23 @@ public final class ContextOuterClass {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof context.ContextOuterClass.OpticalLink)) {
+            if (!(obj instanceof context.ContextOuterClass.ServiceConfigRule)) {
                 return super.equals(obj);
             }
-            context.ContextOuterClass.OpticalLink other = (context.ContextOuterClass.OpticalLink) obj;
-            if (!getName().equals(other.getName()))
-                return false;
-            if (hasDetails() != other.hasDetails())
+            context.ContextOuterClass.ServiceConfigRule other = (context.ContextOuterClass.ServiceConfigRule) obj;
+            if (hasServiceId() != other.hasServiceId())
                 return false;
-            if (hasDetails()) {
-                if (!getDetails().equals(other.getDetails()))
+            if (hasServiceId()) {
+                if (!getServiceId().equals(other.getServiceId()))
                     return false;
             }
-            if (hasOpticalLinkUuid() != other.hasOpticalLinkUuid())
+            if (hasConfigruleCustom() != other.hasConfigruleCustom())
                 return false;
-            if (hasOpticalLinkUuid()) {
-                if (!getOpticalLinkUuid().equals(other.getOpticalLinkUuid()))
+            if (hasConfigruleCustom()) {
+                if (!getConfigruleCustom().equals(other.getConfigruleCustom()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -78798,66 +79911,64 @@ public final class ContextOuterClass {
             }
             int hash = 41;
             hash = (19 * hash) + getDescriptor().hashCode();
-            hash = (37 * hash) + NAME_FIELD_NUMBER;
-            hash = (53 * hash) + getName().hashCode();
-            if (hasDetails()) {
-                hash = (37 * hash) + DETAILS_FIELD_NUMBER;
-                hash = (53 * hash) + getDetails().hashCode();
+            if (hasServiceId()) {
+                hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getServiceId().hashCode();
             }
-            if (hasOpticalLinkUuid()) {
-                hash = (37 * hash) + OPTICAL_LINK_UUID_FIELD_NUMBER;
-                hash = (53 * hash) + getOpticalLinkUuid().hashCode();
+            if (hasConfigruleCustom()) {
+                hash = (37 * hash) + CONFIGRULE_CUSTOM_FIELD_NUMBER;
+                hash = (53 * hash) + getConfigruleCustom().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule 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.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
         }
 
-        public static context.ContextOuterClass.OpticalLink parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+        public static context.ContextOuterClass.ServiceConfigRule parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
         }
 
@@ -78870,7 +79981,7 @@ public final class ContextOuterClass {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(context.ContextOuterClass.OpticalLink prototype) {
+        public static Builder newBuilder(context.ContextOuterClass.ServiceConfigRule prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -78886,67 +79997,58 @@ public final class ContextOuterClass {
         }
 
         /**
-         * Protobuf type {@code context.OpticalLink}
+         * Protobuf type {@code context.ServiceConfigRule}
          */
-        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.OpticalLink)
-        context.ContextOuterClass.OpticalLinkOrBuilder {
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements // @@protoc_insertion_point(builder_implements:context.ServiceConfigRule)
+        context.ContextOuterClass.ServiceConfigRuleOrBuilder {
 
             public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.OpticalLink.class, context.ContextOuterClass.OpticalLink.Builder.class);
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ServiceConfigRule.class, context.ContextOuterClass.ServiceConfigRule.Builder.class);
             }
 
-            // Construct using context.ContextOuterClass.OpticalLink.newBuilder()
+            // Construct using context.ContextOuterClass.ServiceConfigRule.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();
-                name_ = "";
-                if (detailsBuilder_ == null) {
-                    details_ = null;
-                } else {
-                    details_ = null;
-                    detailsBuilder_ = null;
+                bitField0_ = 0;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
+                    serviceIdBuilder_ = null;
                 }
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = null;
-                } else {
-                    opticalLinkUuid_ = null;
-                    opticalLinkUuidBuilder_ = null;
+                configruleCustom_ = null;
+                if (configruleCustomBuilder_ != null) {
+                    configruleCustomBuilder_.dispose();
+                    configruleCustomBuilder_ = null;
                 }
                 return this;
             }
 
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
-                return context.ContextOuterClass.internal_static_context_OpticalLink_descriptor;
+                return context.ContextOuterClass.internal_static_context_ServiceConfigRule_descriptor;
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
-                return context.ContextOuterClass.OpticalLink.getDefaultInstance();
+            public context.ContextOuterClass.ServiceConfigRule getDefaultInstanceForType() {
+                return context.ContextOuterClass.ServiceConfigRule.getDefaultInstance();
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink build() {
-                context.ContextOuterClass.OpticalLink result = buildPartial();
+            public context.ContextOuterClass.ServiceConfigRule build() {
+                context.ContextOuterClass.ServiceConfigRule result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -78954,77 +80056,45 @@ public final class ContextOuterClass {
             }
 
             @java.lang.Override
-            public context.ContextOuterClass.OpticalLink buildPartial() {
-                context.ContextOuterClass.OpticalLink result = new context.ContextOuterClass.OpticalLink(this);
-                result.name_ = name_;
-                if (detailsBuilder_ == null) {
-                    result.details_ = details_;
-                } else {
-                    result.details_ = detailsBuilder_.build();
-                }
-                if (opticalLinkUuidBuilder_ == null) {
-                    result.opticalLinkUuid_ = opticalLinkUuid_;
-                } else {
-                    result.opticalLinkUuid_ = opticalLinkUuidBuilder_.build();
+            public context.ContextOuterClass.ServiceConfigRule buildPartial() {
+                context.ContextOuterClass.ServiceConfigRule result = new context.ContextOuterClass.ServiceConfigRule(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(context.ContextOuterClass.ServiceConfigRule result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.configruleCustom_ = configruleCustomBuilder_ == null ? configruleCustom_ : configruleCustomBuilder_.build();
+                }
             }
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof context.ContextOuterClass.OpticalLink) {
-                    return mergeFrom((context.ContextOuterClass.OpticalLink) other);
+                if (other instanceof context.ContextOuterClass.ServiceConfigRule) {
+                    return mergeFrom((context.ContextOuterClass.ServiceConfigRule) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(context.ContextOuterClass.OpticalLink other) {
-                if (other == context.ContextOuterClass.OpticalLink.getDefaultInstance())
+            public Builder mergeFrom(context.ContextOuterClass.ServiceConfigRule other) {
+                if (other == context.ContextOuterClass.ServiceConfigRule.getDefaultInstance())
                     return this;
-                if (!other.getName().isEmpty()) {
-                    name_ = other.name_;
-                    onChanged();
-                }
-                if (other.hasDetails()) {
-                    mergeDetails(other.getDetails());
+                if (other.hasServiceId()) {
+                    mergeServiceId(other.getServiceId());
                 }
-                if (other.hasOpticalLinkUuid()) {
-                    mergeOpticalLinkUuid(other.getOpticalLinkUuid());
+                if (other.hasConfigruleCustom()) {
+                    mergeConfigruleCustom(other.getConfigruleCustom());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -79036,318 +80106,288 @@ public final class ContextOuterClass {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                context.ContextOuterClass.OpticalLink parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getConfigruleCustomFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (context.ContextOuterClass.OpticalLink) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
-                }
-                return this;
-            }
-
-            private java.lang.Object name_ = "";
-
-            /**
-             * <code>string name = 1;</code>
-             * @return The name.
-             */
-            public java.lang.String getName() {
-                java.lang.Object ref = name_;
-                if (!(ref instanceof java.lang.String)) {
-                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
-                    java.lang.String s = bs.toStringUtf8();
-                    name_ = s;
-                    return s;
-                } else {
-                    return (java.lang.String) ref;
-                }
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @return The bytes for name.
-             */
-            public com.google.protobuf.ByteString getNameBytes() {
-                java.lang.Object ref = name_;
-                if (ref instanceof String) {
-                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
-                    name_ = b;
-                    return b;
-                } else {
-                    return (com.google.protobuf.ByteString) ref;
-                }
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @param value The name to set.
-             * @return This builder for chaining.
-             */
-            public Builder setName(java.lang.String value) {
-                if (value == null) {
-                    throw new NullPointerException();
+                    onChanged();
                 }
-                name_ = value;
-                onChanged();
+                // finally
                 return this;
             }
 
-            /**
-             * <code>string name = 1;</code>
-             * @return This builder for chaining.
-             */
-            public Builder clearName() {
-                name_ = getDefaultInstance().getName();
-                onChanged();
-                return this;
-            }
-
-            /**
-             * <code>string name = 1;</code>
-             * @param value The bytes for name to set.
-             * @return This builder for chaining.
-             */
-            public Builder setNameBytes(com.google.protobuf.ByteString value) {
-                if (value == null) {
-                    throw new NullPointerException();
-                }
-                checkByteStringIsUtf8(value);
-                name_ = value;
-                onChanged();
-                return this;
-            }
+            private int bitField0_;
 
-            private context.ContextOuterClass.OpticalLinkDetails details_;
+            private context.ContextOuterClass.ServiceId serviceId_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> detailsBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
-             * @return Whether the details field is set.
+             * <code>.context.ServiceId service_id = 1;</code>
+             * @return Whether the serviceId field is set.
              */
-            public boolean hasDetails() {
-                return detailsBuilder_ != null || details_ != null;
+            public boolean hasServiceId() {
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
-             * @return The details.
+             * <code>.context.ServiceId service_id = 1;</code>
+             * @return The serviceId.
              */
-            public context.ContextOuterClass.OpticalLinkDetails getDetails() {
-                if (detailsBuilder_ == null) {
-                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+            public context.ContextOuterClass.ServiceId getServiceId() {
+                if (serviceIdBuilder_ == null) {
+                    return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
                 } else {
-                    return detailsBuilder_.getMessage();
+                    return serviceIdBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails value) {
-                if (detailsBuilder_ == null) {
+            public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+                if (serviceIdBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    details_ = value;
-                    onChanged();
+                    serviceId_ = value;
                 } else {
-                    detailsBuilder_.setMessage(value);
+                    serviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder setDetails(context.ContextOuterClass.OpticalLinkDetails.Builder builderForValue) {
-                if (detailsBuilder_ == null) {
-                    details_ = builderForValue.build();
-                    onChanged();
+            public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
+                if (serviceIdBuilder_ == null) {
+                    serviceId_ = builderForValue.build();
                 } else {
-                    detailsBuilder_.setMessage(builderForValue.build());
+                    serviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder mergeDetails(context.ContextOuterClass.OpticalLinkDetails value) {
-                if (detailsBuilder_ == null) {
-                    if (details_ != null) {
-                        details_ = context.ContextOuterClass.OpticalLinkDetails.newBuilder(details_).mergeFrom(value).buildPartial();
+            public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+                if (serviceIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
-                        details_ = value;
+                        serviceId_ = value;
                     }
-                    onChanged();
                 } else {
-                    detailsBuilder_.mergeFrom(value);
+                    serviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public Builder clearDetails() {
-                if (detailsBuilder_ == null) {
-                    details_ = null;
-                    onChanged();
-                } else {
-                    details_ = null;
-                    detailsBuilder_ = null;
+            public Builder clearServiceId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
+                    serviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public context.ContextOuterClass.OpticalLinkDetails.Builder getDetailsBuilder() {
+            public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
-                return getDetailsFieldBuilder().getBuilder();
+                return getServiceIdFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            public context.ContextOuterClass.OpticalLinkDetailsOrBuilder getDetailsOrBuilder() {
-                if (detailsBuilder_ != null) {
-                    return detailsBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+                if (serviceIdBuilder_ != null) {
+                    return serviceIdBuilder_.getMessageOrBuilder();
                 } else {
-                    return details_ == null ? context.ContextOuterClass.OpticalLinkDetails.getDefaultInstance() : details_;
+                    return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkDetails details = 2;</code>
+             * <code>.context.ServiceId service_id = 1;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder> getDetailsFieldBuilder() {
-                if (detailsBuilder_ == null) {
-                    detailsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkDetails, context.ContextOuterClass.OpticalLinkDetails.Builder, context.ContextOuterClass.OpticalLinkDetailsOrBuilder>(getDetails(), getParentForChildren(), isClean());
-                    details_ = null;
+            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 detailsBuilder_;
+                return serviceIdBuilder_;
             }
 
-            private context.ContextOuterClass.OpticalLinkId opticalLinkUuid_;
+            private context.ContextOuterClass.ConfigRule_Custom configruleCustom_;
 
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> opticalLinkUuidBuilder_;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> configruleCustomBuilder_;
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-             * @return Whether the opticalLinkUuid field is set.
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+             * @return Whether the configruleCustom field is set.
              */
-            public boolean hasOpticalLinkUuid() {
-                return opticalLinkUuidBuilder_ != null || opticalLinkUuid_ != null;
+            public boolean hasConfigruleCustom() {
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
-             * @return The opticalLinkUuid.
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
+             * @return The configruleCustom.
              */
-            public context.ContextOuterClass.OpticalLinkId getOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+            public context.ContextOuterClass.ConfigRule_Custom getConfigruleCustom() {
+                if (configruleCustomBuilder_ == null) {
+                    return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
                 } else {
-                    return opticalLinkUuidBuilder_.getMessage();
+                    return configruleCustomBuilder_.getMessage();
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
-                if (opticalLinkUuidBuilder_ == null) {
+            public Builder setConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+                if (configruleCustomBuilder_ == null) {
                     if (value == null) {
                         throw new NullPointerException();
                     }
-                    opticalLinkUuid_ = value;
-                    onChanged();
+                    configruleCustom_ = value;
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(value);
+                    configruleCustomBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder setOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId.Builder builderForValue) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = builderForValue.build();
-                    onChanged();
+            public Builder setConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+                if (configruleCustomBuilder_ == null) {
+                    configruleCustom_ = builderForValue.build();
                 } else {
-                    opticalLinkUuidBuilder_.setMessage(builderForValue.build());
+                    configruleCustomBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder mergeOpticalLinkUuid(context.ContextOuterClass.OpticalLinkId value) {
-                if (opticalLinkUuidBuilder_ == null) {
-                    if (opticalLinkUuid_ != null) {
-                        opticalLinkUuid_ = context.ContextOuterClass.OpticalLinkId.newBuilder(opticalLinkUuid_).mergeFrom(value).buildPartial();
+            public Builder mergeConfigruleCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+                if (configruleCustomBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && configruleCustom_ != null && configruleCustom_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+                        getConfigruleCustomBuilder().mergeFrom(value);
                     } else {
-                        opticalLinkUuid_ = value;
+                        configruleCustom_ = value;
                     }
-                    onChanged();
                 } else {
-                    opticalLinkUuidBuilder_.mergeFrom(value);
+                    configruleCustomBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public Builder clearOpticalLinkUuid() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuid_ = null;
-                    onChanged();
-                } else {
-                    opticalLinkUuid_ = null;
-                    opticalLinkUuidBuilder_ = null;
+            public Builder clearConfigruleCustom() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                configruleCustom_ = null;
+                if (configruleCustomBuilder_ != null) {
+                    configruleCustomBuilder_.dispose();
+                    configruleCustomBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public context.ContextOuterClass.OpticalLinkId.Builder getOpticalLinkUuidBuilder() {
+            public context.ContextOuterClass.ConfigRule_Custom.Builder getConfigruleCustomBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
-                return getOpticalLinkUuidFieldBuilder().getBuilder();
+                return getConfigruleCustomFieldBuilder().getBuilder();
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            public context.ContextOuterClass.OpticalLinkIdOrBuilder getOpticalLinkUuidOrBuilder() {
-                if (opticalLinkUuidBuilder_ != null) {
-                    return opticalLinkUuidBuilder_.getMessageOrBuilder();
+            public context.ContextOuterClass.ConfigRule_CustomOrBuilder getConfigruleCustomOrBuilder() {
+                if (configruleCustomBuilder_ != null) {
+                    return configruleCustomBuilder_.getMessageOrBuilder();
                 } else {
-                    return opticalLinkUuid_ == null ? context.ContextOuterClass.OpticalLinkId.getDefaultInstance() : opticalLinkUuid_;
+                    return configruleCustom_ == null ? context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance() : configruleCustom_;
                 }
             }
 
             /**
-             * <code>.context.OpticalLinkId optical_link_uuid = 3;</code>
+             * <code>.context.ConfigRule_Custom configrule_custom = 2;</code>
              */
-            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder> getOpticalLinkUuidFieldBuilder() {
-                if (opticalLinkUuidBuilder_ == null) {
-                    opticalLinkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLinkId.Builder, context.ContextOuterClass.OpticalLinkIdOrBuilder>(getOpticalLinkUuid(), getParentForChildren(), isClean());
-                    opticalLinkUuid_ = null;
+            private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> getConfigruleCustomFieldBuilder() {
+                if (configruleCustomBuilder_ == null) {
+                    configruleCustomBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(getConfigruleCustom(), getParentForChildren(), isClean());
+                    configruleCustom_ = null;
                 }
-                return opticalLinkUuidBuilder_;
+                return configruleCustomBuilder_;
             }
 
             @java.lang.Override
@@ -79359,39 +80399,49 @@ public final class ContextOuterClass {
             public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.mergeUnknownFields(unknownFields);
             }
-            // @@protoc_insertion_point(builder_scope:context.OpticalLink)
+            // @@protoc_insertion_point(builder_scope:context.ServiceConfigRule)
         }
 
-        // @@protoc_insertion_point(class_scope:context.OpticalLink)
-        private static final context.ContextOuterClass.OpticalLink DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:context.ServiceConfigRule)
+        private static final context.ContextOuterClass.ServiceConfigRule DEFAULT_INSTANCE;
 
         static {
-            DEFAULT_INSTANCE = new context.ContextOuterClass.OpticalLink();
+            DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfigRule();
         }
 
-        public static context.ContextOuterClass.OpticalLink getDefaultInstance() {
+        public static context.ContextOuterClass.ServiceConfigRule getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<OpticalLink> PARSER = new com.google.protobuf.AbstractParser<OpticalLink>() {
+        private static final com.google.protobuf.Parser<ServiceConfigRule> PARSER = new com.google.protobuf.AbstractParser<ServiceConfigRule>() {
 
             @java.lang.Override
-            public OpticalLink parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new OpticalLink(input, extensionRegistry);
+            public ServiceConfigRule parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
-        public static com.google.protobuf.Parser<OpticalLink> parser() {
+        public static com.google.protobuf.Parser<ServiceConfigRule> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<OpticalLink> getParserForType() {
+        public com.google.protobuf.Parser<ServiceConfigRule> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public context.ContextOuterClass.OpticalLink getDefaultInstanceForType() {
+        public context.ContextOuterClass.ServiceConfigRule getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
     }
@@ -79700,6 +80750,14 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Constraint_Exclusions_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_QoSProfileId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_QoSProfileId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Constraint_QoSProfile_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Constraint_QoSProfile_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;
@@ -79724,26 +80782,42 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigList_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkId_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalConfigEvent_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkId_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalConfigEvent_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_FiberId_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalEndPointId_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_FiberId_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalEndPointId_fieldAccessorTable;
 
-    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_Fiber_descriptor;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkList_descriptor;
 
-    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_Fiber_fieldAccessorTable;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkList_fieldAccessorTable;
 
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_CSlotsEntry_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_LSlotsEntry_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLinkDetails_SSlotsEntry_fieldAccessorTable;
+
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_OpticalLink_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_OpticalLink_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ServiceConfigRule_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ServiceConfigRule_fieldAccessorTable;
+
     public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
         return descriptor;
     }
@@ -79751,7 +80825,7 @@ public final class ContextOuterClass {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\214\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\"\211\001\n\017TopologyDetails\022(\n\013topol" + "ogy_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004nam" + "e\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Devic" + "e\022\034\n\005links\030\004 \003(\0132\r.context.Link\";\n\016Topol" + "ogyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.contex" + "t.TopologyId\"5\n\014TopologyList\022%\n\ntopologi" + "es\030\001 \003(\0132\021.context.Topology\"X\n\rTopologyE" + "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013t" + "opology_id\030\002 \001(\0132\023.context.TopologyId\".\n" + "\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.context" + ".Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.co" + "ntext.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_t" + "ype\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.conte" + "xt.DeviceConfig\022G\n\031device_operational_st" + "atus\030\005 \001(\0162$.context.DeviceOperationalSt" + "atusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.conte" + "xt.DeviceDriverEnum\022+\n\020device_endpoints\030" + "\007 \003(\0132\021.context.EndPoint\022&\n\ncomponents\030\010" + " \003(\0132\022.context.Component\022(\n\rcontroller_i" + "d\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tComponent" + "\022%\n\016component_uuid\030\001 \001(\0132\r.context.Uuid\022" + "\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattribute" + "s\030\004 \003(\0132\".context.Component.AttributesEn" + "try\022\016\n\006parent\030\005 \001(\t\0321\n\017AttributesEntry\022\013" + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014Device" + "Config\022)\n\014config_rules\030\001 \003(\0132\023.context.C" + "onfigRule\"5\n\014DeviceIdList\022%\n\ndevice_ids\030" + "\001 \003(\0132\021.context.DeviceId\".\n\nDeviceList\022 " + "\n\007devices\030\001 \003(\0132\017.context.Device\"\216\001\n\014Dev" + "iceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025.context." + "DeviceIdList\022\031\n\021include_endpoints\030\002 \001(\010\022" + "\034\n\024include_config_rules\030\003 \001(\010\022\032\n\022include" + "_components\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005eve" + "nt\030\001 \001(\0132\016.context.Event\022$\n\tdevice_id\030\002 " + "\001(\0132\021.context.DeviceId\022,\n\rdevice_config\030" + "\003 \001(\0132\025.context.DeviceConfig\"*\n\006LinkId\022 " + "\n\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"I\n\016Link" + "Attributes\022\033\n\023total_capacity_gbps\030\001 \001(\002\022" + "\032\n\022used_capacity_gbps\030\002 \001(\002\"\223\001\n\004Link\022 \n\007" + "link_id\030\001 \001(\0132\017.context.LinkId\022\014\n\004name\030\002" + " \001(\t\022.\n\021link_endpoint_ids\030\003 \003(\0132\023.contex" + "t.EndPointId\022+\n\nattributes\030\004 \001(\0132\027.conte" + "xt.LinkAttributes\"/\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\"\333\002\n" + "\007Service\022&\n\nservice_id\030\001 \001(\0132\022.context.S" + "erviceId\022\014\n\004name\030\002 \001(\t\022.\n\014service_type\030\003" + " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + "e_endpoint_ids\030\004 \003(\0132\023.context.EndPointI" + "d\0220\n\023service_constraints\030\005 \003(\0132\023.context" + ".Constraint\022.\n\016service_status\030\006 \001(\0132\026.co" + "ntext.ServiceStatus\022.\n\016service_config\030\007 " + "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + "\030\010 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + "\030\001 \003(\0132\020.context.Service\"\225\001\n\rServiceFilt" + "er\022+\n\013service_ids\030\001 \001(\0132\026.context.Servic" + "eIdList\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n" + "\023include_constraints\030\003 \001(\010\022\034\n\024include_co" + "nfig_rules\030\004 \001(\010\"U\n\014ServiceEvent\022\035\n\005even" + "t\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002 " + "\001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nco" + "ntext_id\030\001 \001(\0132\022.context.ContextId\022!\n\nsl" + "ice_uuid\030\002 \001(\0132\r.context.Uuid\"\240\003\n\005Slice\022" + "\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022\014\n\004n" + "ame\030\002 \001(\t\022/\n\022slice_endpoint_ids\030\003 \003(\0132\023." + "context.EndPointId\022.\n\021slice_constraints\030" + "\004 \003(\0132\023.context.Constraint\022-\n\021slice_serv" + "ice_ids\030\005 \003(\0132\022.context.ServiceId\022,\n\022sli" + "ce_subslice_ids\030\006 \003(\0132\020.context.SliceId\022" + "*\n\014slice_status\030\007 \001(\0132\024.context.SliceSta" + "tus\022*\n\014slice_config\030\010 \001(\0132\024.context.Slic" + "eConfig\022(\n\013slice_owner\030\t \001(\0132\023.context.S" + "liceOwner\022%\n\ttimestamp\030\n \001(\0132\022.context.T" + "imestamp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001" + "(\0132\r.context.Uuid\022\024\n\014owner_string\030\002 \001(\t\"" + "=\n\013SliceStatus\022.\n\014slice_status\030\001 \001(\0162\030.c" + "ontext.SliceStatusEnum\"8\n\013SliceConfig\022)\n" + "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" + "\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.con" + "text.SliceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(" + "\0132\016.context.Slice\"\312\001\n\013SliceFilter\022\'\n\tsli" + "ce_ids\030\001 \001(\0132\024.context.SliceIdList\022\034\n\024in" + "clude_endpoint_ids\030\002 \001(\010\022\033\n\023include_cons" + "traints\030\003 \001(\010\022\033\n\023include_service_ids\030\004 \001" + "(\010\022\034\n\024include_subslice_ids\030\005 \001(\010\022\034\n\024incl" + "ude_config_rules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005" + "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" + "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" + "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" + "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" + "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" + "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" + "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" + " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" + "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" + "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" + "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" + "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" + "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" + "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" + "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" + "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" + "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" + "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" + ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" + "\rconnection_id\030\001 \001(\0132\025.context.Connectio" + "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" + "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" + "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" + "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" + "\033.context.ConnectionSettings\"A\n\020Connecti" + "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" + "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" + "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" + "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." + "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" + "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" + "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" + "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" + "uid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010EndPoint\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020" + "kpi_sample_types\030\004 \003(\0162\037.kpi_sample_type" + "s.KpiSampleType\022,\n\021endpoint_location\030\005 \001" + "(\0132\021.context.Location\"{\n\014EndPointName\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoint_name\030\003 " + "\001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016EndPointId" + "List\022)\n\014endpoint_ids\030\001 \003(\0132\023.context.End" + "PointId\"A\n\020EndPointNameList\022-\n\016endpoint_" + "names\030\001 \003(\0132\025.context.EndPointName\"A\n\021Co" + "nfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n" + "\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022" + "(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPointI" + "d\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n" + "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" + "nfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.context" + ".ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.cont" + "ext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n\021C" + "onstraint_Custom\022\027\n\017constraint_type\030\001 \001(" + "\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constrain" + "t_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rd" + "uration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010la" + "titude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Locat" + "ion\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 " + "\001(\0132\025.context.GPS_PositionH\000B\n\n\010location" + "\"l\n\033Constraint_EndPointLocation\022(\n\013endpo" + "int_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010loc" + "ation\030\002 \001(\0132\021.context.Location\"Y\n\033Constr" + "aint_EndPointPriority\022(\n\013endpoint_id\030\001 \001" + "(\0132\023.context.EndPointId\022\020\n\010priority\030\002 \001(" + "\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_laten" + "cy_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025" + "\n\rcapacity_gbps\030\001 \001(\002\"c\n\033Constraint_SLA_" + "Availability\022\032\n\022num_disjoint_paths\030\001 \001(\r" + "\022\022\n\nall_active\030\002 \001(\010\022\024\n\014availability\030\003 \001" + "(\002\"V\n\036Constraint_SLA_Isolation_level\0224\n\017" + "isolation_level\030\001 \003(\0162\033.context.Isolatio" + "nLevelEnum\"\242\001\n\025Constraint_Exclusions\022\024\n\014" + "is_permanent\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021" + ".context.DeviceId\022)\n\014endpoint_ids\030\003 \003(\0132" + "\023.context.EndPointId\022!\n\010link_ids\030\004 \003(\0132\017" + ".context.LinkId\"\333\004\n\nConstraint\022-\n\006action" + "\030\001 \001(\0162\035.context.ConstraintActionEnum\022,\n" + "\006custom\030\002 \001(\0132\032.context.Constraint_Custo" + "mH\000\0220\n\010schedule\030\003 \001(\0132\034.context.Constrai" + "nt_ScheduleH\000\022A\n\021endpoint_location\030\004 \001(\013" + "2$.context.Constraint_EndPointLocationH\000" + "\022A\n\021endpoint_priority\030\005 \001(\0132$.context.Co" + "nstraint_EndPointPriorityH\000\0228\n\014sla_capac" + "ity\030\006 \001(\0132 .context.Constraint_SLA_Capac" + "ityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.context.Con" + "straint_SLA_LatencyH\000\022@\n\020sla_availabilit" + "y\030\010 \001(\0132$.context.Constraint_SLA_Availab" + "ilityH\000\022@\n\rsla_isolation\030\t \001(\0132\'.context" + ".Constraint_SLA_Isolation_levelH\000\0224\n\nexc" + "lusions\030\n \001(\0132\036.context.Constraint_Exclu" + "sionsH\000B\014\n\nconstraint\"^\n\022TeraFlowControl" + "ler\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" + "tId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n" + "\024AuthenticationResult\022&\n\ncontext_id\030\001 \001(" + "\0132\022.context.ContextId\022\025\n\rauthenticated\030\002" + " \001(\010\"-\n\017OpticalConfigId\022\032\n\022opticalconfig" + "_uuid\030\001 \001(\t\"S\n\rOpticalConfig\0222\n\020opticalc" + "onfig_id\030\001 \001(\0132\030.context.OpticalConfigId" + "\022\016\n\006config\030\002 \001(\t\"C\n\021OpticalConfigList\022.\n" + "\016opticalconfigs\030\001 \003(\0132\026.context.OpticalC" + "onfig\"9\n\rOpticalLinkId\022(\n\021optical_link_u" + "uid\030\001 \001(\0132\r.context.Uuid\",\n\007FiberId\022!\n\nf" + "iber_uuid\030\001 \001(\0132\r.context.Uuid\"\341\001\n\005Fiber" + "\022\n\n\002ID\030\n \001(\t\022\020\n\010src_port\030\001 \001(\t\022\020\n\010dst_po" + "rt\030\002 \001(\t\022\027\n\017local_peer_port\030\003 \001(\t\022\030\n\020rem" + "ote_peer_port\030\004 \001(\t\022\017\n\007c_slots\030\005 \003(\005\022\017\n\007" + "l_slots\030\006 \003(\005\022\017\n\007s_slots\030\007 \003(\005\022\016\n\006length" + "\030\010 \001(\002\022\014\n\004used\030\t \001(\010\022$\n\nfiber_uuid\030\013 \001(\013" + "2\020.context.FiberId\"d\n\022OpticalLinkDetails" + "\022\016\n\006length\030\001 \001(\002\022\016\n\006source\030\002 \001(\t\022\016\n\006targ" + "et\030\003 \001(\t\022\036\n\006fibers\030\004 \003(\0132\016.context.Fiber" + "\"|\n\013OpticalLink\022\014\n\004name\030\001 \001(\t\022,\n\007details" + "\030\002 \001(\0132\033.context.OpticalLinkDetails\0221\n\021o" + "ptical_link_uuid\030\003 \001(\0132\026.context.Optical" + "LinkId*j\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UND" + "EFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTT" + "YPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\350\002\n\020D" + "eviceDriverEnum\022\032\n\026DEVICEDRIVER_UNDEFINE" + "D\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVI" + "CEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER" + "_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOL" + "OGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_532\020\005\022\023\n\017DE" + "VICEDRIVER_XR\020\006\022\033\n\027DEVICEDRIVER_IETF_L2V" + "PN\020\007\022 \n\034DEVICEDRIVER_GNMI_OPENCONFIG\020\010\022\034" + "\n\030DEVICEDRIVER_OPTICAL_TFS\020\t\022\032\n\026DEVICEDR" + "IVER_IETF_ACTN\020\n\022\023\n\017DEVICEDRIVER_OC\020\013*\217\001" + "\n\033DeviceOperationalStatusEnum\022%\n!DEVICEO" + "PERATIONALSTATUS_UNDEFINED\020\000\022$\n DEVICEOP" + "ERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICEOPER" + "ATIONALSTATUS_ENABLED\020\002*\320\001\n\017ServiceTypeE" + "num\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVICET" + "YPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SERV" + "ICETYPE_TAPI_CONNECTIVITY_SERVICE\020\003\022\022\n\016S" + "ERVICETYPE_TE\020\004\022\023\n\017SERVICETYPE_E2E\020\005\022$\n " + "SERVICETYPE_OPTICAL_CONNECTIVITY\020\006*\304\001\n\021S" + "erviceStatusEnum\022\033\n\027SERVICESTATUS_UNDEFI" + "NED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024SERV" + "ICESTATUS_ACTIVE\020\002\022\032\n\026SERVICESTATUS_UPDA" + "TING\020\003\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020" + "\004\022\036\n\032SERVICESTATUS_SLA_VIOLATED\020\005*\251\001\n\017Sl" + "iceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000" + "\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS" + "_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICE" + "STATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLA" + "TED\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTIO" + "N_UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023C" + "ONFIGACTION_DELETE\020\002*m\n\024ConstraintAction" + "Enum\022\036\n\032CONSTRAINTACTION_UNDEFINED\020\000\022\030\n\024" + "CONSTRAINTACTION_SET\020\001\022\033\n\027CONSTRAINTACTI" + "ON_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020\n\014NO" + "_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021" + "LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLATION" + "\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n\032PHY" + "SICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_RES" + "OURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIONS_I" + "SOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\246\031\n\016Co" + "ntextService\022:\n\016ListContextIds\022\016.context" + ".Empty\032\026.context.ContextIdList\"\000\0226\n\014List" + "Contexts\022\016.context.Empty\032\024.context.Conte" + "xtList\"\000\0224\n\nGetContext\022\022.context.Context" + "Id\032\020.context.Context\"\000\0224\n\nSetContext\022\020.c" + "ontext.Context\032\022.context.ContextId\"\000\0225\n\r" + "RemoveContext\022\022.context.ContextId\032\016.cont" + "ext.Empty\"\000\022=\n\020GetContextEvents\022\016.contex" + "t.Empty\032\025.context.ContextEvent\"\0000\001\022@\n\017Li" + "stTopologyIds\022\022.context.ContextId\032\027.cont" + "ext.TopologyIdList\"\000\022=\n\016ListTopologies\022\022" + ".context.ContextId\032\025.context.TopologyLis" + "t\"\000\0227\n\013GetTopology\022\023.context.TopologyId\032" + "\021.context.Topology\"\000\022E\n\022GetTopologyDetai" + "ls\022\023.context.TopologyId\032\030.context.Topolo" + "gyDetails\"\000\0227\n\013SetTopology\022\021.context.Top" + "ology\032\023.context.TopologyId\"\000\0227\n\016RemoveTo" + "pology\022\023.context.TopologyId\032\016.context.Em" + "pty\"\000\022?\n\021GetTopologyEvents\022\016.context.Emp" + "ty\032\026.context.TopologyEvent\"\0000\001\0228\n\rListDe" + "viceIds\022\016.context.Empty\032\025.context.Device" + "IdList\"\000\0224\n\013ListDevices\022\016.context.Empty\032" + "\023.context.DeviceList\"\000\0221\n\tGetDevice\022\021.co" + "ntext.DeviceId\032\017.context.Device\"\000\0221\n\tSet" + "Device\022\017.context.Device\032\021.context.Device" + "Id\"\000\0223\n\014RemoveDevice\022\021.context.DeviceId\032" + "\016.context.Empty\"\000\022;\n\017GetDeviceEvents\022\016.c" + "ontext.Empty\032\024.context.DeviceEvent\"\0000\001\022<" + "\n\014SelectDevice\022\025.context.DeviceFilter\032\023." + "context.DeviceList\"\000\022I\n\021ListEndPointName" + "s\022\027.context.EndPointIdList\032\031.context.End" + "PointNameList\"\000\0224\n\013ListLinkIds\022\016.context" + ".Empty\032\023.context.LinkIdList\"\000\0220\n\tListLin" + "ks\022\016.context.Empty\032\021.context.LinkList\"\000\022" + "+\n\007GetLink\022\017.context.LinkId\032\r.context.Li" + "nk\"\000\022+\n\007SetLink\022\r.context.Link\032\017.context" + ".LinkId\"\000\022/\n\nRemoveLink\022\017.context.LinkId" + "\032\016.context.Empty\"\000\0227\n\rGetLinkEvents\022\016.co" + "ntext.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016L" + "istServiceIds\022\022.context.ContextId\032\026.cont" + "ext.ServiceIdList\"\000\022:\n\014ListServices\022\022.co" + "ntext.ContextId\032\024.context.ServiceList\"\000\022" + "4\n\nGetService\022\022.context.ServiceId\032\020.cont" + "ext.Service\"\000\0224\n\nSetService\022\020.context.Se" + "rvice\032\022.context.ServiceId\"\000\0226\n\014UnsetServ" + "ice\022\020.context.Service\032\022.context.ServiceI" + "d\"\000\0225\n\rRemoveService\022\022.context.ServiceId" + "\032\016.context.Empty\"\000\022=\n\020GetServiceEvents\022\016" + ".context.Empty\032\025.context.ServiceEvent\"\0000" + "\001\022?\n\rSelectService\022\026.context.ServiceFilt" + "er\032\024.context.ServiceList\"\000\022:\n\014ListSliceI" + "ds\022\022.context.ContextId\032\024.context.SliceId" + "List\"\000\0226\n\nListSlices\022\022.context.ContextId" + "\032\022.context.SliceList\"\000\022.\n\010GetSlice\022\020.con" + "text.SliceId\032\016.context.Slice\"\000\022.\n\010SetSli" + "ce\022\016.context.Slice\032\020.context.SliceId\"\000\0220" + "\n\nUnsetSlice\022\016.context.Slice\032\020.context.S" + "liceId\"\000\0221\n\013RemoveSlice\022\020.context.SliceI" + "d\032\016.context.Empty\"\000\0229\n\016GetSliceEvents\022\016." + "context.Empty\032\023.context.SliceEvent\"\0000\001\0229" + "\n\013SelectSlice\022\024.context.SliceFilter\032\022.co" + "ntext.SliceList\"\000\022D\n\021ListConnectionIds\022\022" + ".context.ServiceId\032\031.context.ConnectionI" + "dList\"\000\022@\n\017ListConnections\022\022.context.Ser" + "viceId\032\027.context.ConnectionList\"\000\022=\n\rGet" + "Connection\022\025.context.ConnectionId\032\023.cont" + "ext.Connection\"\000\022=\n\rSetConnection\022\023.cont" + "ext.Connection\032\025.context.ConnectionId\"\000\022" + ";\n\020RemoveConnection\022\025.context.Connection" + "Id\032\016.context.Empty\"\000\022C\n\023GetConnectionEve" + "nts\022\016.context.Empty\032\030.context.Connection" + "Event\"\0000\001\022@\n\020GetOpticalConfig\022\016.context." + "Empty\032\032.context.OpticalConfigList\"\000\022F\n\020S" + "etOpticalConfig\022\026.context.OpticalConfig\032" + "\030.context.OpticalConfigId\"\000\022I\n\023SelectOpt" + "icalConfig\022\030.context.OpticalConfigId\032\026.c" + "ontext.OpticalConfig\"\000\0228\n\016SetOpticalLink" + "\022\024.context.OpticalLink\032\016.context.Empty\"\000" + "\022@\n\016GetOpticalLink\022\026.context.OpticalLink" + "Id\032\024.context.OpticalLink\"\000\022.\n\010GetFiber\022\020" + ".context.FiberId\032\016.context.Fiber\"\000b\006prot" + "o3" };
+        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" + "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" + "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" + "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" + ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" + ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" + "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" + "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" + "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" + "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" + "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" + "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" + "t.TeraFlowController\"8\n\rContextIdList\022\'\n" + "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" + "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" + "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" + "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" + "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\267\001\n\010Topolog" + "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" + "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." + "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" + "text.LinkId\022)\n\020optical_link_ids\030\005 \003(\0132\017." + "context.LinkId\"\266\001\n\017TopologyDetails\022(\n\013to" + "pology_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004" + "name\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.De" + "vice\022\034\n\005links\030\004 \003(\0132\r.context.Link\022+\n\rop" + "tical_links\030\005 \003(\0132\024.context.OpticalLink\"" + ";\n\016TopologyIdList\022)\n\014topology_ids\030\001 \003(\0132" + "\023.context.TopologyId\"5\n\014TopologyList\022%\n\n" + "topologies\030\001 \003(\0132\021.context.Topology\"X\n\rT" + "opologyEvent\022\035\n\005event\030\001 \001(\0132\016.context.Ev" + "ent\022(\n\013topology_id\030\002 \001(\0132\023.context.Topol" + "ogyId\".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r" + ".context.Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 " + "\001(\0132\021.context.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013" + "device_type\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\013" + "2\025.context.DeviceConfig\022G\n\031device_operat" + "ional_status\030\005 \001(\0162$.context.DeviceOpera" + "tionalStatusEnum\0221\n\016device_drivers\030\006 \003(\016" + "2\031.context.DeviceDriverEnum\022+\n\020device_en" + "dpoints\030\007 \003(\0132\021.context.EndPoint\022&\n\ncomp" + "onents\030\010 \003(\0132\022.context.Component\022(\n\rcont" + "roller_id\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tC" + "omponent\022%\n\016component_uuid\030\001 \001(\0132\r.conte" + "xt.Uuid\022\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\na" + "ttributes\030\004 \003(\0132\".context.Component.Attr" + "ibutesEntry\022\016\n\006parent\030\005 \001(\t\0321\n\017Attribute" + "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9" + "\n\014DeviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.c" + "ontext.ConfigRule\"5\n\014DeviceIdList\022%\n\ndev" + "ice_ids\030\001 \003(\0132\021.context.DeviceId\".\n\nDevi" + "ceList\022 \n\007devices\030\001 \003(\0132\017.context.Device" + "\"\216\001\n\014DeviceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025." + "context.DeviceIdList\022\031\n\021include_endpoint" + "s\030\002 \001(\010\022\034\n\024include_config_rules\030\003 \001(\010\022\032\n" + "\022include_components\030\004 \001(\010\"\200\001\n\013DeviceEven" + "t\022\035\n\005event\030\001 \001(\0132\016.context.Event\022$\n\tdevi" + "ce_id\030\002 \001(\0132\021.context.DeviceId\022,\n\rdevice" + "_config\030\003 \001(\0132\025.context.DeviceConfig\"*\n\006" + "LinkId\022 \n\tlink_uuid\030\001 \001(\0132\r.context.Uuid" + "\"I\n\016LinkAttributes\022\033\n\023total_capacity_gbp" + "s\030\001 \001(\002\022\032\n\022used_capacity_gbps\030\002 \001(\002\"\275\001\n\004" + "Link\022 \n\007link_id\030\001 \001(\0132\017.context.LinkId\022\014" + "\n\004name\030\002 \001(\t\022(\n\tlink_type\030\003 \001(\0162\025.contex" + "t.LinkTypeEnum\022.\n\021link_endpoint_ids\030\004 \003(" + "\0132\023.context.EndPointId\022+\n\nattributes\030\005 \001" + "(\0132\027.context.LinkAttributes\"/\n\nLinkIdLis" + "t\022!\n\010link_ids\030\001 \003(\0132\017.context.LinkId\"(\n\010" + "LinkList\022\034\n\005links\030\001 \003(\0132\r.context.Link\"L" + "\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.context.Eve" + "nt\022 \n\007link_id\030\002 \001(\0132\017.context.LinkId\"X\n\t" + "ServiceId\022&\n\ncontext_id\030\001 \001(\0132\022.context." + "ContextId\022#\n\014service_uuid\030\002 \001(\0132\r.contex" + "t.Uuid\"\333\002\n\007Service\022&\n\nservice_id\030\001 \001(\0132\022" + ".context.ServiceId\022\014\n\004name\030\002 \001(\t\022.\n\014serv" + "ice_type\030\003 \001(\0162\030.context.ServiceTypeEnum" + "\0221\n\024service_endpoint_ids\030\004 \003(\0132\023.context" + ".EndPointId\0220\n\023service_constraints\030\005 \003(\013" + "2\023.context.Constraint\022.\n\016service_status\030" + "\006 \001(\0132\026.context.ServiceStatus\022.\n\016service" + "_config\030\007 \001(\0132\026.context.ServiceConfig\022%\n" + "\ttimestamp\030\010 \001(\0132\022.context.Timestamp\"C\n\r" + "ServiceStatus\0222\n\016service_status\030\001 \001(\0162\032." + "context.ServiceStatusEnum\":\n\rServiceConf" + "ig\022)\n\014config_rules\030\001 \003(\0132\023.context.Confi" + "gRule\"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.context.Service\"\225\001\n\rS" + "erviceFilter\022+\n\013service_ids\030\001 \001(\0132\026.cont" + "ext.ServiceIdList\022\034\n\024include_endpoint_id" + "s\030\002 \001(\010\022\033\n\023include_constraints\030\003 \001(\010\022\034\n\024" + "include_config_rules\030\004 \001(\010\"U\n\014ServiceEve" + "nt\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&\n\nser" + "vice_id\030\002 \001(\0132\022.context.ServiceId\"T\n\007Sli" + "ceId\022&\n\ncontext_id\030\001 \001(\0132\022.context.Conte" + "xtId\022!\n\nslice_uuid\030\002 \001(\0132\r.context.Uuid\"" + "\240\003\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.context.Sl" + "iceId\022\014\n\004name\030\002 \001(\t\022/\n\022slice_endpoint_id" + "s\030\003 \003(\0132\023.context.EndPointId\022.\n\021slice_co" + "nstraints\030\004 \003(\0132\023.context.Constraint\022-\n\021" + "slice_service_ids\030\005 \003(\0132\022.context.Servic" + "eId\022,\n\022slice_subslice_ids\030\006 \003(\0132\020.contex" + "t.SliceId\022*\n\014slice_status\030\007 \001(\0132\024.contex" + "t.SliceStatus\022*\n\014slice_config\030\010 \001(\0132\024.co" + "ntext.SliceConfig\022(\n\013slice_owner\030\t \001(\0132\023" + ".context.SliceOwner\022%\n\ttimestamp\030\n \001(\0132\022" + ".context.Timestamp\"E\n\nSliceOwner\022!\n\nowne" + "r_uuid\030\001 \001(\0132\r.context.Uuid\022\024\n\014owner_str" + "ing\030\002 \001(\t\"=\n\013SliceStatus\022.\n\014slice_status" + "\030\001 \001(\0162\030.context.SliceStatusEnum\"8\n\013Slic" + "eConfig\022)\n\014config_rules\030\001 \003(\0132\023.context." + "ConfigRule\"2\n\013SliceIdList\022#\n\tslice_ids\030\001" + " \003(\0132\020.context.SliceId\"+\n\tSliceList\022\036\n\006s" + "lices\030\001 \003(\0132\016.context.Slice\"\312\001\n\013SliceFil" + "ter\022\'\n\tslice_ids\030\001 \001(\0132\024.context.SliceId" + "List\022\034\n\024include_endpoint_ids\030\002 \001(\010\022\033\n\023in" + "clude_constraints\030\003 \001(\010\022\033\n\023include_servi" + "ce_ids\030\004 \001(\010\022\034\n\024include_subslice_ids\030\005 \001" + "(\010\022\034\n\024include_config_rules\030\006 \001(\010\"O\n\nSlic" + "eEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022\"\n" + "\010slice_id\030\002 \001(\0132\020.context.SliceId\"6\n\014Con" + "nectionId\022&\n\017connection_uuid\030\001 \001(\0132\r.con" + "text.Uuid\"2\n\025ConnectionSettings_L0\022\031\n\021ls" + "p_symbolic_name\030\001 \001(\t\"\236\001\n\025ConnectionSett" + "ings_L2\022\027\n\017src_mac_address\030\001 \001(\t\022\027\n\017dst_" + "mac_address\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n" + "\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mp" + "ls_traffic_class\030\006 \001(\r\"t\n\025ConnectionSett" + "ings_L3\022\026\n\016src_ip_address\030\001 \001(\t\022\026\n\016dst_i" + "p_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protoco" + "l\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025ConnectionSettin" + "gs_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(" + "\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022Co" + "nnectionSettings\022*\n\002l0\030\001 \001(\0132\036.context.C" + "onnectionSettings_L0\022*\n\002l2\030\002 \001(\0132\036.conte" + "xt.ConnectionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.c" + "ontext.ConnectionSettings_L3\022*\n\002l4\030\004 \001(\013" + "2\036.context.ConnectionSettings_L4\"\363\001\n\nCon" + "nection\022,\n\rconnection_id\030\001 \001(\0132\025.context" + ".ConnectionId\022&\n\nservice_id\030\002 \001(\0132\022.cont" + "ext.ServiceId\0223\n\026path_hops_endpoint_ids\030" + "\003 \003(\0132\023.context.EndPointId\022+\n\017sub_servic" + "e_ids\030\004 \003(\0132\022.context.ServiceId\022-\n\010setti" + "ngs\030\005 \001(\0132\033.context.ConnectionSettings\"A" + "\n\020ConnectionIdList\022-\n\016connection_ids\030\001 \003" + "(\0132\025.context.ConnectionId\":\n\016ConnectionL" + "ist\022(\n\013connections\030\001 \003(\0132\023.context.Conne" + "ction\"^\n\017ConnectionEvent\022\035\n\005event\030\001 \001(\0132" + "\016.context.Event\022,\n\rconnection_id\030\002 \001(\0132\025" + ".context.ConnectionId\"\202\001\n\nEndPointId\022(\n\013" + "topology_id\030\001 \001(\0132\023.context.TopologyId\022$" + "\n\tdevice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\r" + "endpoint_uuid\030\003 \001(\0132\r.context.Uuid\"\302\001\n\010E" + "ndPoint\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022\014\n\004name\030\002 \001(\t\022\025\n\rendpoint_type" + "\030\003 \001(\t\0229\n\020kpi_sample_types\030\004 \003(\0162\037.kpi_s" + "ample_types.KpiSampleType\022,\n\021endpoint_lo" + "cation\030\005 \001(\0132\021.context.Location\"{\n\014EndPo" + "intName\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoi" + "nt_name\030\003 \001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016" + "EndPointIdList\022)\n\014endpoint_ids\030\001 \003(\0132\023.c" + "ontext.EndPointId\"A\n\020EndPointNameList\022-\n" + "\016endpoint_names\030\001 \003(\0132\025.context.EndPoint" + "Name\"A\n\021ConfigRule_Custom\022\024\n\014resource_ke" + "y\030\001 \001(\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016Confi" + "gRule_ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.context" + ".EndPointId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclR" + "uleSet\"\234\001\n\nConfigRule\022)\n\006action\030\001 \001(\0162\031." + "context.ConfigActionEnum\022,\n\006custom\030\002 \001(\013" + "2\032.context.ConfigRule_CustomH\000\022&\n\003acl\030\003 " + "\001(\0132\027.context.ConfigRule_ACLH\000B\r\n\013config" + "_rule\"F\n\021Constraint_Custom\022\027\n\017constraint" + "_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n" + "\023Constraint_Schedule\022\027\n\017start_timestamp\030" + "\001 \001(\001\022\025\n\rduration_days\030\002 \001(\002\"3\n\014GPS_Posi" + "tion\022\020\n\010latitude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(" + "\002\"\204\001\n\010Location\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_" + "position\030\002 \001(\0132\025.context.GPS_PositionH\000\022" + "\023\n\tinterface\030\003 \001(\tH\000\022\026\n\014circuit_pack\030\004 \001" + "(\tH\000B\n\n\010location\"l\n\033Constraint_EndPointL" + "ocation\022(\n\013endpoint_id\030\001 \001(\0132\023.context.E" + "ndPointId\022#\n\010location\030\002 \001(\0132\021.context.Lo" + "cation\"Y\n\033Constraint_EndPointPriority\022(\n" + "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" + "\020\n\010priority\030\002 \001(\r\"0\n\026Constraint_SLA_Late" + "ncy\022\026\n\016e2e_latency_ms\030\001 \001(\002\"0\n\027Constrain" + "t_SLA_Capacity\022\025\n\rcapacity_gbps\030\001 \001(\002\"c\n" + "\033Constraint_SLA_Availability\022\032\n\022num_disj" + "oint_paths\030\001 \001(\r\022\022\n\nall_active\030\002 \001(\010\022\024\n\014" + "availability\030\003 \001(\002\"V\n\036Constraint_SLA_Iso" + "lation_level\0224\n\017isolation_level\030\001 \003(\0162\033." + "context.IsolationLevelEnum\"\242\001\n\025Constrain" + "t_Exclusions\022\024\n\014is_permanent\030\001 \001(\010\022%\n\nde" + "vice_ids\030\002 \003(\0132\021.context.DeviceId\022)\n\014end" + "point_ids\030\003 \003(\0132\023.context.EndPointId\022!\n\010" + "link_ids\030\004 \003(\0132\017.context.LinkId\"5\n\014QoSPr" + "ofileId\022%\n\016qos_profile_id\030\001 \001(\0132\r.contex" + "t.Uuid\"`\n\025Constraint_QoSProfile\022-\n\016qos_p" + "rofile_id\030\001 \001(\0132\025.context.QoSProfileId\022\030" + "\n\020qos_profile_name\030\002 \001(\t\"\222\005\n\nConstraint\022" + "-\n\006action\030\001 \001(\0162\035.context.ConstraintActi" + "onEnum\022,\n\006custom\030\002 \001(\0132\032.context.Constra" + "int_CustomH\000\0220\n\010schedule\030\003 \001(\0132\034.context" + ".Constraint_ScheduleH\000\022A\n\021endpoint_locat" + "ion\030\004 \001(\0132$.context.Constraint_EndPointL" + "ocationH\000\022A\n\021endpoint_priority\030\005 \001(\0132$.c" + "ontext.Constraint_EndPointPriorityH\000\0228\n\014" + "sla_capacity\030\006 \001(\0132 .context.Constraint_" + "SLA_CapacityH\000\0226\n\013sla_latency\030\007 \001(\0132\037.co" + "ntext.Constraint_SLA_LatencyH\000\022@\n\020sla_av" + "ailability\030\010 \001(\0132$.context.Constraint_SL" + "A_AvailabilityH\000\022@\n\rsla_isolation\030\t \001(\0132" + "\'.context.Constraint_SLA_Isolation_level" + "H\000\0224\n\nexclusions\030\n \001(\0132\036.context.Constra" + "int_ExclusionsH\000\0225\n\013qos_profile\030\013 \001(\0132\036." + "context.Constraint_QoSProfileH\000B\014\n\nconst" + "raint\"^\n\022TeraFlowController\022&\n\ncontext_i" + "d\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_addres" + "s\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationR" + "esult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Cont" + "extId\022\025\n\rauthenticated\030\002 \001(\010\"-\n\017OpticalC" + "onfigId\022\032\n\022opticalconfig_uuid\030\001 \001(\t\"y\n\rO" + "pticalConfig\0222\n\020opticalconfig_id\030\001 \001(\0132\030" + ".context.OpticalConfigId\022\016\n\006config\030\002 \001(\t" + "\022$\n\tdevice_id\030\003 \001(\0132\021.context.DeviceId\"C" + "\n\021OpticalConfigList\022.\n\016opticalconfigs\030\001 " + "\003(\0132\026.context.OpticalConfig\"g\n\022OpticalCo" + "nfigEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event" + "\0222\n\020opticalconfig_id\030\002 \001(\0132\030.context.Opt" + "icalConfigId\"_\n\021OpticalEndPointId\022$\n\tdev" + "ice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpo" + "int_uuid\030\003 \001(\0132\r.context.Uuid\">\n\017Optical" + "LinkList\022+\n\roptical_links\030\001 \003(\0132\024.contex" + "t.OpticalLink\"\304\003\n\022OpticalLinkDetails\022\016\n\006" + "length\030\001 \001(\002\022\020\n\010src_port\030\002 \001(\t\022\020\n\010dst_po" + "rt\030\003 \001(\t\022\027\n\017local_peer_port\030\004 \001(\t\022\030\n\020rem" + "ote_peer_port\030\005 \001(\t\022\014\n\004used\030\006 \001(\010\0228\n\007c_s" + "lots\030\007 \003(\0132\'.context.OpticalLinkDetails." + "CSlotsEntry\0228\n\007l_slots\030\010 \003(\0132\'.context.O" + "pticalLinkDetails.LSlotsEntry\0228\n\007s_slots" + "\030\t \003(\0132\'.context.OpticalLinkDetails.SSlo" + "tsEntry\032-\n\013CSlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005v" + "alue\030\002 \001(\005:\0028\001\032-\n\013LSlotsEntry\022\013\n\003key\030\001 \001" + "(\t\022\r\n\005value\030\002 \001(\005:\0028\001\032-\n\013SSlotsEntry\022\013\n\003" + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"\243\001\n\013Optical" + "Link\022\014\n\004name\030\001 \001(\t\0224\n\017optical_details\030\002 " + "\001(\0132\033.context.OpticalLinkDetails\022 \n\007link" + "_id\030\003 \001(\0132\017.context.LinkId\022.\n\021link_endpo" + "int_ids\030\004 \003(\0132\023.context.EndPointId\"r\n\021Se" + "rviceConfigRule\022&\n\nservice_id\030\001 \001(\0132\022.co" + "ntext.ServiceId\0225\n\021configrule_custom\030\002 \001" + "(\0132\032.context.ConfigRule_Custom*j\n\rEventT" + "ypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVEN" + "TTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020" + "EVENTTYPE_REMOVE\020\003*\316\003\n\020DeviceDriverEnum\022" + "\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRI" + "VER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPO" + "RT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICED" + "RIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICED" + "RIVER_ONF_TR_532\020\005\022\023\n\017DEVICEDRIVER_XR\020\006\022" + "\033\n\027DEVICEDRIVER_IETF_L2VPN\020\007\022 \n\034DEVICEDR" + "IVER_GNMI_OPENCONFIG\020\010\022\034\n\030DEVICEDRIVER_O" + "PTICAL_TFS\020\t\022\032\n\026DEVICEDRIVER_IETF_ACTN\020\n" + "\022\023\n\017DEVICEDRIVER_OC\020\013\022\024\n\020DEVICEDRIVER_QK" + "D\020\014\022\033\n\027DEVICEDRIVER_IETF_L3VPN\020\r\022\033\n\027DEVI" + "CEDRIVER_IETF_SLICE\020\016\022\024\n\020DEVICEDRIVER_NC" + "E\020\017*\217\001\n\033DeviceOperationalStatusEnum\022%\n!D" + "EVICEOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DE" + "VICEOPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVI" + "CEOPERATIONALSTATUS_ENABLED\020\002*w\n\014LinkTyp" + "eEnum\022\024\n\020LINKTYPE_UNKNOWN\020\000\022\023\n\017LINKTYPE_" + "COPPER\020\001\022\022\n\016LINKTYPE_FIBER\020\002\022\022\n\016LINKTYPE" + "_RADIO\020\003\022\024\n\020LINKTYPE_VIRTUAL\020\004*\345\001\n\017Servi" + "ceTypeEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020S" + "ERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022" + ")\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE" + "\020\003\022\022\n\016SERVICETYPE_TE\020\004\022\023\n\017SERVICETYPE_E2" + "E\020\005\022$\n SERVICETYPE_OPTICAL_CONNECTIVITY\020" + "\006\022\023\n\017SERVICETYPE_QKD\020\007*\304\001\n\021ServiceStatus" + "Enum\022\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SER" + "VICESTATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_AC" + "TIVE\020\002\022\032\n\026SERVICESTATUS_UPDATING\020\003\022!\n\035SE" + "RVICESTATUS_PENDING_REMOVAL\020\004\022\036\n\032SERVICE" + "STATUS_SLA_VIOLATED\020\005*\251\001\n\017SliceStatusEnu" + "m\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023SLICESTA" + "TUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022S" + "LICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATUS_DEINI" + "T\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005*]\n\020Con" + "figActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020" + "\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_" + "DELETE\020\002*m\n\024ConstraintActionEnum\022\036\n\032CONS" + "TRAINTACTION_UNDEFINED\020\000\022\030\n\024CONSTRAINTAC" + "TION_SET\020\001\022\033\n\027CONSTRAINTACTION_DELETE\020\002*" + "\203\002\n\022IsolationLevelEnum\022\020\n\014NO_ISOLATION\020\000" + "\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_ISOL" + "ATION\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PHYSIC" + "AL_MEMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NETWOR" + "K_ISOLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLAT" + "ION\020\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION\020\007\022\025" + "\n\021SERVICE_ISOLATION\020\0102\202\034\n\016ContextService" + "\022:\n\016ListContextIds\022\016.context.Empty\032\026.con" + "text.ContextIdList\"\000\0226\n\014ListContexts\022\016.c" + "ontext.Empty\032\024.context.ContextList\"\000\0224\n\n" + "GetContext\022\022.context.ContextId\032\020.context" + ".Context\"\000\0224\n\nSetContext\022\020.context.Conte" + "xt\032\022.context.ContextId\"\000\0225\n\rRemoveContex" + "t\022\022.context.ContextId\032\016.context.Empty\"\000\022" + "=\n\020GetContextEvents\022\016.context.Empty\032\025.co" + "ntext.ContextEvent\"\0000\001\022@\n\017ListTopologyId" + "s\022\022.context.ContextId\032\027.context.Topology" + "IdList\"\000\022=\n\016ListTopologies\022\022.context.Con" + "textId\032\025.context.TopologyList\"\000\0227\n\013GetTo" + "pology\022\023.context.TopologyId\032\021.context.To" + "pology\"\000\022E\n\022GetTopologyDetails\022\023.context" + ".TopologyId\032\030.context.TopologyDetails\"\000\022" + "7\n\013SetTopology\022\021.context.Topology\032\023.cont" + "ext.TopologyId\"\000\0227\n\016RemoveTopology\022\023.con" + "text.TopologyId\032\016.context.Empty\"\000\022?\n\021Get" + "TopologyEvents\022\016.context.Empty\032\026.context" + ".TopologyEvent\"\0000\001\0228\n\rListDeviceIds\022\016.co" + "ntext.Empty\032\025.context.DeviceIdList\"\000\0224\n\013" + "ListDevices\022\016.context.Empty\032\023.context.De" + "viceList\"\000\0221\n\tGetDevice\022\021.context.Device" + "Id\032\017.context.Device\"\000\0221\n\tSetDevice\022\017.con" + "text.Device\032\021.context.DeviceId\"\000\0223\n\014Remo" + "veDevice\022\021.context.DeviceId\032\016.context.Em" + "pty\"\000\022;\n\017GetDeviceEvents\022\016.context.Empty" + "\032\024.context.DeviceEvent\"\0000\001\022<\n\014SelectDevi" + "ce\022\025.context.DeviceFilter\032\023.context.Devi" + "ceList\"\000\022I\n\021ListEndPointNames\022\027.context." + "EndPointIdList\032\031.context.EndPointNameLis" + "t\"\000\0224\n\013ListLinkIds\022\016.context.Empty\032\023.con" + "text.LinkIdList\"\000\0220\n\tListLinks\022\016.context" + ".Empty\032\021.context.LinkList\"\000\022+\n\007GetLink\022\017" + ".context.LinkId\032\r.context.Link\"\000\022+\n\007SetL" + "ink\022\r.context.Link\032\017.context.LinkId\"\000\022/\n" + "\nRemoveLink\022\017.context.LinkId\032\016.context.E" + "mpty\"\000\0227\n\rGetLinkEvents\022\016.context.Empty\032" + "\022.context.LinkEvent\"\0000\001\022>\n\016ListServiceId" + "s\022\022.context.ContextId\032\026.context.ServiceI" + "dList\"\000\022:\n\014ListServices\022\022.context.Contex" + "tId\032\024.context.ServiceList\"\000\0224\n\nGetServic" + "e\022\022.context.ServiceId\032\020.context.Service\"" + "\000\0224\n\nSetService\022\020.context.Service\032\022.cont" + "ext.ServiceId\"\000\0226\n\014UnsetService\022\020.contex" + "t.Service\032\022.context.ServiceId\"\000\0225\n\rRemov" + "eService\022\022.context.ServiceId\032\016.context.E" + "mpty\"\000\022=\n\020GetServiceEvents\022\016.context.Emp" + "ty\032\025.context.ServiceEvent\"\0000\001\022?\n\rSelectS" + "ervice\022\026.context.ServiceFilter\032\024.context" + ".ServiceList\"\000\022:\n\014ListSliceIds\022\022.context" + ".ContextId\032\024.context.SliceIdList\"\000\0226\n\nLi" + "stSlices\022\022.context.ContextId\032\022.context.S" + "liceList\"\000\022.\n\010GetSlice\022\020.context.SliceId" + "\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016.context" + ".Slice\032\020.context.SliceId\"\000\0220\n\nUnsetSlice" + "\022\016.context.Slice\032\020.context.SliceId\"\000\0221\n\013" + "RemoveSlice\022\020.context.SliceId\032\016.context." + "Empty\"\000\0229\n\016GetSliceEvents\022\016.context.Empt" + "y\032\023.context.SliceEvent\"\0000\001\0229\n\013SelectSlic" + "e\022\024.context.SliceFilter\032\022.context.SliceL" + "ist\"\000\022D\n\021ListConnectionIds\022\022.context.Ser" + "viceId\032\031.context.ConnectionIdList\"\000\022@\n\017L" + "istConnections\022\022.context.ServiceId\032\027.con" + "text.ConnectionList\"\000\022=\n\rGetConnection\022\025" + ".context.ConnectionId\032\023.context.Connecti" + "on\"\000\022=\n\rSetConnection\022\023.context.Connecti" + "on\032\025.context.ConnectionId\"\000\022;\n\020RemoveCon" + "nection\022\025.context.ConnectionId\032\016.context" + ".Empty\"\000\022C\n\023GetConnectionEvents\022\016.contex" + "t.Empty\032\030.context.ConnectionEvent\"\0000\001\022@\n" + "\020GetOpticalConfig\022\016.context.Empty\032\032.cont" + "ext.OpticalConfigList\"\000\022F\n\020SetOpticalCon" + "fig\022\026.context.OpticalConfig\032\030.context.Op" + "ticalConfigId\"\000\022I\n\023UpdateOpticalConfig\022\026" + ".context.OpticalConfig\032\030.context.Optical" + "ConfigId\"\000\022I\n\023SelectOpticalConfig\022\030.cont" + "ext.OpticalConfigId\032\026.context.OpticalCon" + "fig\"\000\022A\n\023DeleteOpticalConfig\022\030.context.O" + "pticalConfigId\032\016.context.Empty\"\000\022@\n\024Dele" + "teOpticalChannel\022\026.context.OpticalConfig" + "\032\016.context.Empty\"\000\0228\n\016SetOpticalLink\022\024.c" + "ontext.OpticalLink\032\016.context.Empty\"\000\0229\n\016" + "GetOpticalLink\022\017.context.LinkId\032\024.contex" + "t.OpticalLink\"\000\0226\n\021DeleteOpticalLink\022\017.c" + "ontext.LinkId\032\016.context.Empty\"\000\022@\n\022GetOp" + "ticalLinkList\022\016.context.Empty\032\030.context." + "OpticalLinkList\"\000\022G\n\027DeleteServiceConfig" + "Rule\022\032.context.ServiceConfigRule\032\016.conte" + "xt.Empty\"\000b\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { acl.Acl.getDescriptor(), kpi_sample_types.KpiSampleTypes.getDescriptor() });
         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[] {});
@@ -79774,9 +80848,9 @@ public final class ContextOuterClass {
         internal_static_context_TopologyId_descriptor = getDescriptor().getMessageTypes().get(9);
         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(10);
-        internal_static_context_Topology_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Topology_descriptor, new java.lang.String[] { "TopologyId", "Name", "DeviceIds", "LinkIds" });
+        internal_static_context_Topology_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Topology_descriptor, new java.lang.String[] { "TopologyId", "Name", "DeviceIds", "LinkIds", "OpticalLinkIds" });
         internal_static_context_TopologyDetails_descriptor = getDescriptor().getMessageTypes().get(11);
-        internal_static_context_TopologyDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_TopologyDetails_descriptor, new java.lang.String[] { "TopologyId", "Name", "Devices", "Links" });
+        internal_static_context_TopologyDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_TopologyDetails_descriptor, new java.lang.String[] { "TopologyId", "Name", "Devices", "Links", "OpticalLinks" });
         internal_static_context_TopologyIdList_descriptor = getDescriptor().getMessageTypes().get(12);
         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(13);
@@ -79806,7 +80880,7 @@ public final class ContextOuterClass {
         internal_static_context_LinkAttributes_descriptor = getDescriptor().getMessageTypes().get(24);
         internal_static_context_LinkAttributes_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_LinkAttributes_descriptor, new java.lang.String[] { "TotalCapacityGbps", "UsedCapacityGbps" });
         internal_static_context_Link_descriptor = getDescriptor().getMessageTypes().get(25);
-        internal_static_context_Link_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Link_descriptor, new java.lang.String[] { "LinkId", "Name", "LinkEndpointIds", "Attributes" });
+        internal_static_context_Link_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Link_descriptor, new java.lang.String[] { "LinkId", "Name", "LinkType", "LinkEndpointIds", "Attributes" });
         internal_static_context_LinkIdList_descriptor = getDescriptor().getMessageTypes().get(26);
         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(27);
@@ -79890,7 +80964,7 @@ public final class ContextOuterClass {
         internal_static_context_GPS_Position_descriptor = getDescriptor().getMessageTypes().get(66);
         internal_static_context_GPS_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_GPS_Position_descriptor, new java.lang.String[] { "Latitude", "Longitude" });
         internal_static_context_Location_descriptor = getDescriptor().getMessageTypes().get(67);
-        internal_static_context_Location_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Location_descriptor, new java.lang.String[] { "Region", "GpsPosition", "Location" });
+        internal_static_context_Location_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Location_descriptor, new java.lang.String[] { "Region", "GpsPosition", "Interface", "CircuitPack", "Location" });
         internal_static_context_Constraint_EndPointLocation_descriptor = getDescriptor().getMessageTypes().get(68);
         internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_EndPointLocation_descriptor, new java.lang.String[] { "EndpointId", "Location" });
         internal_static_context_Constraint_EndPointPriority_descriptor = getDescriptor().getMessageTypes().get(69);
@@ -79905,28 +80979,40 @@ public final class ContextOuterClass {
         internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Isolation_level_descriptor, new java.lang.String[] { "IsolationLevel" });
         internal_static_context_Constraint_Exclusions_descriptor = getDescriptor().getMessageTypes().get(74);
         internal_static_context_Constraint_Exclusions_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_Exclusions_descriptor, new java.lang.String[] { "IsPermanent", "DeviceIds", "EndpointIds", "LinkIds" });
-        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(75);
-        internal_static_context_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_descriptor, new java.lang.String[] { "Action", "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "Constraint" });
-        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(76);
+        internal_static_context_QoSProfileId_descriptor = getDescriptor().getMessageTypes().get(75);
+        internal_static_context_QoSProfileId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_QoSProfileId_descriptor, new java.lang.String[] { "QosProfileId" });
+        internal_static_context_Constraint_QoSProfile_descriptor = getDescriptor().getMessageTypes().get(76);
+        internal_static_context_Constraint_QoSProfile_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_QoSProfile_descriptor, new java.lang.String[] { "QosProfileId", "QosProfileName" });
+        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(77);
+        internal_static_context_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_descriptor, new java.lang.String[] { "Action", "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "QosProfile", "Constraint" });
+        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(78);
         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(77);
+        internal_static_context_AuthenticationResult_descriptor = getDescriptor().getMessageTypes().get(79);
         internal_static_context_AuthenticationResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_AuthenticationResult_descriptor, new java.lang.String[] { "ContextId", "Authenticated" });
-        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(78);
+        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(80);
         internal_static_context_OpticalConfigId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigId_descriptor, new java.lang.String[] { "OpticalconfigUuid" });
-        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(79);
-        internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config" });
-        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(80);
+        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(81);
+        internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config", "DeviceId" });
+        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(82);
         internal_static_context_OpticalConfigList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigList_descriptor, new java.lang.String[] { "Opticalconfigs" });
-        internal_static_context_OpticalLinkId_descriptor = getDescriptor().getMessageTypes().get(81);
-        internal_static_context_OpticalLinkId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkId_descriptor, new java.lang.String[] { "OpticalLinkUuid" });
-        internal_static_context_FiberId_descriptor = getDescriptor().getMessageTypes().get(82);
-        internal_static_context_FiberId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_FiberId_descriptor, new java.lang.String[] { "FiberUuid" });
-        internal_static_context_Fiber_descriptor = getDescriptor().getMessageTypes().get(83);
-        internal_static_context_Fiber_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Fiber_descriptor, new java.lang.String[] { "ID", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "CSlots", "LSlots", "SSlots", "Length", "Used", "FiberUuid" });
-        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(84);
-        internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "Source", "Target", "Fibers" });
-        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(85);
-        internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "Details", "OpticalLinkUuid" });
+        internal_static_context_OpticalConfigEvent_descriptor = getDescriptor().getMessageTypes().get(83);
+        internal_static_context_OpticalConfigEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigEvent_descriptor, new java.lang.String[] { "Event", "OpticalconfigId" });
+        internal_static_context_OpticalEndPointId_descriptor = getDescriptor().getMessageTypes().get(84);
+        internal_static_context_OpticalEndPointId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalEndPointId_descriptor, new java.lang.String[] { "DeviceId", "EndpointUuid" });
+        internal_static_context_OpticalLinkList_descriptor = getDescriptor().getMessageTypes().get(85);
+        internal_static_context_OpticalLinkList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkList_descriptor, new java.lang.String[] { "OpticalLinks" });
+        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(86);
+        internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "Used", "CSlots", "LSlots", "SSlots" });
+        internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(0);
+        internal_static_context_OpticalLinkDetails_CSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(1);
+        internal_static_context_OpticalLinkDetails_LSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(2);
+        internal_static_context_OpticalLinkDetails_SSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
+        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(87);
+        internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "OpticalDetails", "LinkId", "LinkEndpointIds" });
+        internal_static_context_ServiceConfigRule_descriptor = getDescriptor().getMessageTypes().get(88);
+        internal_static_context_ServiceConfigRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ServiceConfigRule_descriptor, new java.lang.String[] { "ServiceId", "ConfigruleCustom" });
         acl.Acl.getDescriptor();
         kpi_sample_types.KpiSampleTypes.getDescriptor();
     }
diff --git a/src/ztp/target/generated-sources/grpc/context/ContextService.java b/src/ztp/target/generated-sources/grpc/context/ContextService.java
index 32544e6beba009b31b06dcd583893933c15eb1fe..d953e779fb114ce9b8f003b3c3b0b96537c4e6af 100644
--- a/src/ztp/target/generated-sources/grpc/context/ContextService.java
+++ b/src/ztp/target/generated-sources/grpc/context/ContextService.java
@@ -98,13 +98,23 @@ public interface ContextService extends MutinyService {
 
     io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> setOpticalConfig(context.ContextOuterClass.OpticalConfig request);
 
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request);
+
     io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request);
 
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request);
+
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request);
 
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request);
+
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request);
 
-    io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request);
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request);
 
     io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
 
diff --git a/src/ztp/target/generated-sources/grpc/context/ContextServiceBean.java b/src/ztp/target/generated-sources/grpc/context/ContextServiceBean.java
index d3c1b628573bf328f51de68a68d21690c2ff7045..3809f8afb198c144cdf1582e91de2f17ae7a6b18 100644
--- a/src/ztp/target/generated-sources/grpc/context/ContextServiceBean.java
+++ b/src/ztp/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -409,6 +409,15 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
         }
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        try {
+            return delegate.updateOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
         try {
@@ -418,6 +427,24 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
         }
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        try {
+            return delegate.deleteOpticalConfig(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+        try {
+            return delegate.deleteOpticalChannel(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
         try {
@@ -428,7 +455,7 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
         try {
             return delegate.getOpticalLink(request);
         } catch (UnsupportedOperationException e) {
@@ -437,9 +464,27 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+        try {
+            return delegate.deleteOpticalLink(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+        try {
+            return delegate.getOpticalLinkList(request);
+        } catch (UnsupportedOperationException e) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
         try {
-            return delegate.getFiber(request);
+            return delegate.deleteServiceConfigRule(request);
         } catch (UnsupportedOperationException e) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
diff --git a/src/ztp/target/generated-sources/grpc/context/ContextServiceClient.java b/src/ztp/target/generated-sources/grpc/context/ContextServiceClient.java
index b1773578d3448de901839bf6e70e855ff58ad9e5..00e56c4f4d68e6a2011c93c213fadf82143a8ba5 100644
--- a/src/ztp/target/generated-sources/grpc/context/ContextServiceClient.java
+++ b/src/ztp/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -245,24 +245,49 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
         return stub.setOpticalConfig(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+        return stub.updateOpticalConfig(request);
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
         return stub.selectOpticalConfig(request);
     }
 
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+        return stub.deleteOpticalConfig(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+        return stub.deleteOpticalChannel(request);
+    }
+
     @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
         return stub.setOpticalLink(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
         return stub.getOpticalLink(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-        return stub.getFiber(request);
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+        return stub.deleteOpticalLink(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+        return stub.getOpticalLinkList(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+        return stub.deleteServiceConfigRule(request);
     }
 
     @Override
diff --git a/src/ztp/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/ztp/target/generated-sources/grpc/context/ContextServiceGrpc.java
index a03f7e9491a695b715ef6bcadcf82150bdc3a231..73a440e7a3c7800b437a5a966ab7c0227aad0cb5 100644
--- a/src/ztp/target/generated-sources/grpc/context/ContextServiceGrpc.java
+++ b/src/ztp/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -4,7 +4,8 @@ import static io.grpc.MethodDescriptor.generateFullMethodName;
 
 /**
  */
-@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.38.1)", comments = "Source: context.proto")
+@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.55.1)", comments = "Source: context.proto")
+@io.grpc.stub.annotations.GrpcGenerated
 public final class ContextServiceGrpc {
 
     private ContextServiceGrpc() {
@@ -778,6 +779,21 @@ public final class ContextServiceGrpc {
         return getSetOpticalConfigMethod;
     }
 
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "UpdateOpticalConfig", requestType = context.ContextOuterClass.OpticalConfig.class, responseType = context.ContextOuterClass.OpticalConfigId.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId> getUpdateOpticalConfigMethod;
+        if ((getUpdateOpticalConfigMethod = ContextServiceGrpc.getUpdateOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getUpdateOpticalConfigMethod = ContextServiceGrpc.getUpdateOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getUpdateOpticalConfigMethod = getUpdateOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UpdateOpticalConfig")).build();
+                }
+            }
+        }
+        return getUpdateOpticalConfigMethod;
+    }
+
     private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig> getSelectOpticalConfigMethod;
 
     @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SelectOpticalConfig", requestType = context.ContextOuterClass.OpticalConfigId.class, responseType = context.ContextOuterClass.OpticalConfig.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
@@ -793,6 +809,36 @@ public final class ContextServiceGrpc {
         return getSelectOpticalConfigMethod;
     }
 
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalConfig", requestType = context.ContextOuterClass.OpticalConfigId.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty> getDeleteOpticalConfigMethod;
+        if ((getDeleteOpticalConfigMethod = ContextServiceGrpc.getDeleteOpticalConfigMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalConfigMethod = ContextServiceGrpc.getDeleteOpticalConfigMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalConfigMethod = getDeleteOpticalConfigMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalConfig")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfigId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteOpticalConfig")).build();
+                }
+            }
+        }
+        return getDeleteOpticalConfigMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalChannel", requestType = context.ContextOuterClass.OpticalConfig.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty> getDeleteOpticalChannelMethod;
+        if ((getDeleteOpticalChannelMethod = ContextServiceGrpc.getDeleteOpticalChannelMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalChannelMethod = ContextServiceGrpc.getDeleteOpticalChannelMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalChannelMethod = getDeleteOpticalChannelMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalChannel")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalConfig.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteOpticalChannel")).build();
+                }
+            }
+        }
+        return getDeleteOpticalChannelMethod;
+    }
+
     private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty> getSetOpticalLinkMethod;
 
     @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "SetOpticalLink", requestType = context.ContextOuterClass.OpticalLink.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
@@ -808,34 +854,64 @@ public final class ContextServiceGrpc {
         return getSetOpticalLinkMethod;
     }
 
-    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
 
-    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLink", requestType = context.ContextOuterClass.OpticalLinkId.class, responseType = context.ContextOuterClass.OpticalLink.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-    public static io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod() {
-        io.grpc.MethodDescriptor<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLink", requestType = context.ContextOuterClass.LinkId.class, responseType = context.ContextOuterClass.OpticalLink.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink> getGetOpticalLinkMethod;
         if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
             synchronized (ContextServiceGrpc.class) {
                 if ((getGetOpticalLinkMethod = ContextServiceGrpc.getGetOpticalLinkMethod) == null) {
-                    ContextServiceGrpc.getGetOpticalLinkMethod = getGetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLinkId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLink")).build();
+                    ContextServiceGrpc.getGetOpticalLinkMethod = getGetOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLink")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.LinkId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLink.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLink")).build();
                 }
             }
         }
         return getGetOpticalLinkMethod;
     }
 
-    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getDeleteOpticalLinkMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteOpticalLink", 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> getDeleteOpticalLinkMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getDeleteOpticalLinkMethod;
+        if ((getDeleteOpticalLinkMethod = ContextServiceGrpc.getDeleteOpticalLinkMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getDeleteOpticalLinkMethod = ContextServiceGrpc.getDeleteOpticalLinkMethod) == null) {
+                    ContextServiceGrpc.getDeleteOpticalLinkMethod = getDeleteOpticalLinkMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteOpticalLink")).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("DeleteOpticalLink")).build();
+                }
+            }
+        }
+        return getDeleteOpticalLinkMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod;
+
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetOpticalLinkList", requestType = context.ContextOuterClass.Empty.class, responseType = context.ContextOuterClass.OpticalLinkList.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList> getGetOpticalLinkListMethod;
+        if ((getGetOpticalLinkListMethod = ContextServiceGrpc.getGetOpticalLinkListMethod) == null) {
+            synchronized (ContextServiceGrpc.class) {
+                if ((getGetOpticalLinkListMethod = ContextServiceGrpc.getGetOpticalLinkListMethod) == null) {
+                    ContextServiceGrpc.getGetOpticalLinkListMethod = getGetOpticalLinkListMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetOpticalLinkList")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.OpticalLinkList.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetOpticalLinkList")).build();
+                }
+            }
+        }
+        return getGetOpticalLinkListMethod;
+    }
+
+    private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod;
 
-    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "GetFiber", requestType = context.ContextOuterClass.FiberId.class, responseType = context.ContextOuterClass.Fiber.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-    public static io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod() {
-        io.grpc.MethodDescriptor<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber> getGetFiberMethod;
-        if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
+    @io.grpc.stub.annotations.RpcMethod(fullMethodName = SERVICE_NAME + '/' + "DeleteServiceConfigRule", requestType = context.ContextOuterClass.ServiceConfigRule.class, responseType = context.ContextOuterClass.Empty.class, methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+    public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod() {
+        io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty> getDeleteServiceConfigRuleMethod;
+        if ((getDeleteServiceConfigRuleMethod = ContextServiceGrpc.getDeleteServiceConfigRuleMethod) == null) {
             synchronized (ContextServiceGrpc.class) {
-                if ((getGetFiberMethod = ContextServiceGrpc.getGetFiberMethod) == null) {
-                    ContextServiceGrpc.getGetFiberMethod = getGetFiberMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetFiber")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.FiberId.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Fiber.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetFiber")).build();
+                if ((getDeleteServiceConfigRuleMethod = ContextServiceGrpc.getDeleteServiceConfigRuleMethod) == null) {
+                    ContextServiceGrpc.getDeleteServiceConfigRuleMethod = getDeleteServiceConfigRuleMethod = io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>newBuilder().setType(io.grpc.MethodDescriptor.MethodType.UNARY).setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteServiceConfigRule")).setSampledToLocalTracing(true).setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.ServiceConfigRule.getDefaultInstance())).setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(context.ContextOuterClass.Empty.getDefaultInstance())).setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("DeleteServiceConfigRule")).build();
                 }
             }
         }
-        return getGetFiberMethod;
+        return getDeleteServiceConfigRuleMethod;
     }
 
     /**
@@ -882,299 +958,299 @@ public final class ContextServiceGrpc {
 
     /**
      */
-    public static abstract class ContextServiceImplBase implements io.grpc.BindableService {
+    public interface AsyncService {
 
         /**
          */
-        public void listContextIds(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList> responseObserver) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default void getTopology(context.ContextOuterClass.TopologyId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyMethod(), responseObserver);
         }
 
         /**
          */
-        public void getTopologyDetails(context.ContextOuterClass.TopologyId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails> responseObserver) {
+        default void getTopologyDetails(context.ContextOuterClass.TopologyId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyDetailsMethod(), responseObserver);
         }
 
         /**
          */
-        public void setTopology(context.ContextOuterClass.Topology request, io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId> responseObserver) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default void getDeviceEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceEventsMethod(), responseObserver);
         }
 
         /**
          */
-        public void selectDevice(context.ContextOuterClass.DeviceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+        default void selectDevice(context.ContextOuterClass.DeviceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectDeviceMethod(), responseObserver);
         }
 
         /**
          */
-        public void listEndPointNames(context.ContextOuterClass.EndPointIdList request, io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList> responseObserver) {
+        default void listEndPointNames(context.ContextOuterClass.EndPointIdList request, io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListEndPointNamesMethod(), responseObserver);
         }
 
         /**
          */
-        public void listLinkIds(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList> responseObserver) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default 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) {
+        default void setService(context.ContextOuterClass.Service request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetServiceMethod(), responseObserver);
         }
 
         /**
          */
-        public void unsetService(context.ContextOuterClass.Service request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
+        default void unsetService(context.ContextOuterClass.Service request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetServiceMethod(), responseObserver);
         }
 
         /**
          */
-        public void removeService(context.ContextOuterClass.ServiceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default 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) {
+        default void getServiceEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceEventsMethod(), responseObserver);
         }
 
         /**
          */
-        public void selectService(context.ContextOuterClass.ServiceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+        default void selectService(context.ContextOuterClass.ServiceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectServiceMethod(), responseObserver);
         }
 
         /**
          */
-        public void listSliceIds(context.ContextOuterClass.ContextId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceIdList> responseObserver) {
+        default void listSliceIds(context.ContextOuterClass.ContextId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceIdList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListSliceIdsMethod(), responseObserver);
         }
 
         /**
          */
-        public void listSlices(context.ContextOuterClass.ContextId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
+        default void listSlices(context.ContextOuterClass.ContextId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListSlicesMethod(), responseObserver);
         }
 
         /**
          */
-        public void getSlice(context.ContextOuterClass.SliceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Slice> responseObserver) {
+        default void getSlice(context.ContextOuterClass.SliceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Slice> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSliceMethod(), responseObserver);
         }
 
         /**
          */
-        public void setSlice(context.ContextOuterClass.Slice request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceId> responseObserver) {
+        default void setSlice(context.ContextOuterClass.Slice request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetSliceMethod(), responseObserver);
         }
 
         /**
          */
-        public void unsetSlice(context.ContextOuterClass.Slice request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceId> responseObserver) {
+        default void unsetSlice(context.ContextOuterClass.Slice request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetSliceMethod(), responseObserver);
         }
 
         /**
          */
-        public void removeSlice(context.ContextOuterClass.SliceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void removeSlice(context.ContextOuterClass.SliceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveSliceMethod(), responseObserver);
         }
 
         /**
          */
-        public void getSliceEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceEvent> responseObserver) {
+        default void getSliceEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceEvent> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSliceEventsMethod(), responseObserver);
         }
 
         /**
          */
-        public void selectSlice(context.ContextOuterClass.SliceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
+        default void selectSlice(context.ContextOuterClass.SliceFilter request, io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectSliceMethod(), responseObserver);
         }
 
         /**
          */
-        public void listConnectionIds(context.ContextOuterClass.ServiceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList> responseObserver) {
+        default void listConnectionIds(context.ContextOuterClass.ServiceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListConnectionIdsMethod(), responseObserver);
         }
 
         /**
          */
-        public void listConnections(context.ContextOuterClass.ServiceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList> responseObserver) {
+        default void listConnections(context.ContextOuterClass.ServiceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListConnectionsMethod(), responseObserver);
         }
 
         /**
          */
-        public void getConnection(context.ContextOuterClass.ConnectionId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection> responseObserver) {
+        default void getConnection(context.ContextOuterClass.ConnectionId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Connection> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectionMethod(), responseObserver);
         }
 
         /**
          */
-        public void setConnection(context.ContextOuterClass.Connection request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId> responseObserver) {
+        default void setConnection(context.ContextOuterClass.Connection request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetConnectionMethod(), responseObserver);
         }
 
         /**
          */
-        public void removeConnection(context.ContextOuterClass.ConnectionId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void removeConnection(context.ContextOuterClass.ConnectionId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveConnectionMethod(), responseObserver);
         }
 
         /**
          */
-        public void getConnectionEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent> responseObserver) {
+        default void getConnectionEvents(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionEvent> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectionEventsMethod(), responseObserver);
         }
 
@@ -1183,47 +1259,84 @@ public final class ContextServiceGrpc {
          * ------------------------------ Experimental -----------------------------
          * </pre>
          */
-        public void getOpticalConfig(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList> responseObserver) {
+        default void getOpticalConfig(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalConfigMethod(), responseObserver);
         }
 
         /**
          */
-        public void setOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+        default void setOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetOpticalConfigMethod(), responseObserver);
         }
 
         /**
          */
-        public void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
+        default void updateOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUpdateOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectOpticalConfigMethod(), responseObserver);
         }
 
         /**
          */
-        public void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalConfigMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalChannelMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetOpticalLinkMethod(), responseObserver);
         }
 
         /**
          */
-        public void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+        default void getOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalLinkMethod(), responseObserver);
         }
 
         /**
          */
-        public void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
-            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetFiberMethod(), responseObserver);
+        default void deleteOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteOpticalLinkMethod(), responseObserver);
+        }
+
+        /**
+         */
+        default void getOpticalLinkList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetOpticalLinkListMethod(), responseObserver);
         }
 
+        /**
+         */
+        default void deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteServiceConfigRuleMethod(), responseObserver);
+        }
+    }
+
+    /**
+     * Base class for the server implementation of the service ContextService.
+     */
+    public static abstract class ContextServiceImplBase implements io.grpc.BindableService, AsyncService {
+
         @java.lang.Override
         public 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(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS))).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(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES))).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(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_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))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(this, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(this, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(this, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(this, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(this, METHODID_GET_CONNECTION_EVENTS))).addMethod(getGetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG))).addMethod(getSetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG))).addMethod(getSelectOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG))).addMethod(getSetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK))).addMethod(getGetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK))).addMethod(getGetFiberMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(this, METHODID_GET_FIBER))).build();
+            return ContextServiceGrpc.bindService(this);
         }
     }
 
     /**
+     * A stub to allow clients to do asynchronous rpc calls to service ContextService.
      */
     public static class ContextServiceStub extends io.grpc.stub.AbstractAsyncStub<ContextServiceStub> {
 
@@ -1545,12 +1658,30 @@ public final class ContextServiceGrpc {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request, responseObserver);
         }
 
+        /**
+         */
+        public void updateOpticalConfig(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getUpdateOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
         /**
          */
         public void selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig> responseObserver) {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request, responseObserver);
         }
 
+        /**
+         */
+        public void deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalConfigMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalChannelMethod(), getCallOptions()), request, responseObserver);
+        }
+
         /**
          */
         public void setOpticalLink(context.ContextOuterClass.OpticalLink request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
@@ -1559,18 +1690,31 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public void getOpticalLink(context.ContextOuterClass.OpticalLinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
+        public void getOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink> responseObserver) {
             io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request, responseObserver);
         }
 
         /**
          */
-        public void getFiber(context.ContextOuterClass.FiberId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber> responseObserver) {
-            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request, responseObserver);
+        public void deleteOpticalLink(context.ContextOuterClass.LinkId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteOpticalLinkMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void getOpticalLinkList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getGetOpticalLinkListMethod(), getCallOptions()), request, responseObserver);
+        }
+
+        /**
+         */
+        public void deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+            io.grpc.stub.ClientCalls.asyncUnaryCall(getChannel().newCall(getDeleteServiceConfigRuleMethod(), getCallOptions()), request, responseObserver);
         }
     }
 
     /**
+     * A stub to allow clients to do synchronous rpc calls to service ContextService.
      */
     public static class ContextServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ContextServiceBlockingStub> {
 
@@ -1892,12 +2036,30 @@ public final class ContextServiceGrpc {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSetOpticalConfigMethod(), getCallOptions(), request);
         }
 
+        /**
+         */
+        public context.ContextOuterClass.OpticalConfigId updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getUpdateOpticalConfigMethod(), getCallOptions(), request);
+        }
+
         /**
          */
         public context.ContextOuterClass.OpticalConfig selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getSelectOpticalConfigMethod(), getCallOptions(), request);
         }
 
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalConfigMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalChannelMethod(), getCallOptions(), request);
+        }
+
         /**
          */
         public context.ContextOuterClass.Empty setOpticalLink(context.ContextOuterClass.OpticalLink request) {
@@ -1906,18 +2068,31 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public context.ContextOuterClass.OpticalLink getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public context.ContextOuterClass.OpticalLink getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalLinkMethod(), getCallOptions(), request);
         }
 
         /**
          */
-        public context.ContextOuterClass.Fiber getFiber(context.ContextOuterClass.FiberId request) {
-            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetFiberMethod(), getCallOptions(), request);
+        public context.ContextOuterClass.Empty deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteOpticalLinkMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.OpticalLinkList getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getGetOpticalLinkListMethod(), getCallOptions(), request);
+        }
+
+        /**
+         */
+        public context.ContextOuterClass.Empty deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.grpc.stub.ClientCalls.blockingUnaryCall(getChannel(), getDeleteServiceConfigRuleMethod(), getCallOptions(), request);
         }
     }
 
     /**
+     * A stub to allow clients to do ListenableFuture-style rpc calls to service ContextService.
      */
     public static class ContextServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ContextServiceFutureStub> {
 
@@ -2197,12 +2372,30 @@ public final class ContextServiceGrpc {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSetOpticalConfigMethod(), getCallOptions()), request);
         }
 
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getUpdateOpticalConfigMethod(), getCallOptions()), request);
+        }
+
         /**
          */
         public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getSelectOpticalConfigMethod(), getCallOptions()), request);
         }
 
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalConfigMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalChannelMethod(), getCallOptions()), request);
+        }
+
         /**
          */
         public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
@@ -2211,14 +2404,26 @@ public final class ContextServiceGrpc {
 
         /**
          */
-        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalLinkMethod(), getCallOptions()), request);
         }
 
         /**
          */
-        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetFiberMethod(), getCallOptions()), request);
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteOpticalLinkMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getGetOpticalLinkListMethod(), getCallOptions()), request);
+        }
+
+        /**
+         */
+        public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.grpc.stub.ClientCalls.futureUnaryCall(getChannel().newCall(getDeleteServiceConfigRuleMethod(), getCallOptions()), request);
         }
     }
 
@@ -2324,21 +2529,31 @@ public final class ContextServiceGrpc {
 
     private static final int METHODID_SET_OPTICAL_CONFIG = 50;
 
-    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+    private static final int METHODID_UPDATE_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 52;
 
-    private static final int METHODID_SET_OPTICAL_LINK = 52;
+    private static final int METHODID_DELETE_OPTICAL_CONFIG = 53;
 
-    private static final int METHODID_GET_OPTICAL_LINK = 53;
+    private static final int METHODID_DELETE_OPTICAL_CHANNEL = 54;
 
-    private static final int METHODID_GET_FIBER = 54;
+    private static final int METHODID_SET_OPTICAL_LINK = 55;
+
+    private static final int METHODID_GET_OPTICAL_LINK = 56;
+
+    private static final int METHODID_DELETE_OPTICAL_LINK = 57;
+
+    private static final int METHODID_GET_OPTICAL_LINK_LIST = 58;
+
+    private static final int METHODID_DELETE_SERVICE_CONFIG_RULE = 59;
 
     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 AsyncService serviceImpl;
 
         private final int methodId;
 
-        MethodHandlers(ContextServiceImplBase serviceImpl, int methodId) {
+        MethodHandlers(AsyncService serviceImpl, int methodId) {
             this.serviceImpl = serviceImpl;
             this.methodId = methodId;
         }
@@ -2500,17 +2715,32 @@ public final class ContextServiceGrpc {
                 case METHODID_SET_OPTICAL_CONFIG:
                     serviceImpl.setOpticalConfig((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver);
                     break;
+                case METHODID_UPDATE_OPTICAL_CONFIG:
+                    serviceImpl.updateOpticalConfig((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver);
+                    break;
                 case METHODID_SELECT_OPTICAL_CONFIG:
                     serviceImpl.selectOpticalConfig((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver);
                     break;
+                case METHODID_DELETE_OPTICAL_CONFIG:
+                    serviceImpl.deleteOpticalConfig((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
+                case METHODID_DELETE_OPTICAL_CHANNEL:
+                    serviceImpl.deleteOpticalChannel((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
                 case METHODID_SET_OPTICAL_LINK:
                     serviceImpl.setOpticalLink((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
                     break;
                 case METHODID_GET_OPTICAL_LINK:
-                    serviceImpl.getOpticalLink((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver);
+                    serviceImpl.getOpticalLink((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver);
+                    break;
+                case METHODID_DELETE_OPTICAL_LINK:
+                    serviceImpl.deleteOpticalLink((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+                    break;
+                case METHODID_GET_OPTICAL_LINK_LIST:
+                    serviceImpl.getOpticalLinkList((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList>) responseObserver);
                     break;
-                case METHODID_GET_FIBER:
-                    serviceImpl.getFiber((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver);
+                case METHODID_DELETE_SERVICE_CONFIG_RULE:
+                    serviceImpl.deleteServiceConfigRule((context.ContextOuterClass.ServiceConfigRule) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
                     break;
                 default:
                     throw new AssertionError();
@@ -2527,6 +2757,10 @@ public final class ContextServiceGrpc {
         }
     }
 
+    public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getListContextIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>(service, METHODID_LIST_CONTEXT_IDS))).addMethod(getListContextsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>(service, METHODID_LIST_CONTEXTS))).addMethod(getGetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>(service, METHODID_GET_CONTEXT))).addMethod(getSetContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>(service, METHODID_SET_CONTEXT))).addMethod(getRemoveContextMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONTEXT))).addMethod(getGetContextEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>(service, METHODID_GET_CONTEXT_EVENTS))).addMethod(getListTopologyIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>(service, METHODID_LIST_TOPOLOGY_IDS))).addMethod(getListTopologiesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>(service, METHODID_LIST_TOPOLOGIES))).addMethod(getGetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>(service, METHODID_GET_TOPOLOGY))).addMethod(getGetTopologyDetailsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(service, METHODID_GET_TOPOLOGY_DETAILS))).addMethod(getSetTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>(service, METHODID_SET_TOPOLOGY))).addMethod(getRemoveTopologyMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_TOPOLOGY))).addMethod(getGetTopologyEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>(service, METHODID_GET_TOPOLOGY_EVENTS))).addMethod(getListDeviceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>(service, METHODID_LIST_DEVICE_IDS))).addMethod(getListDevicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>(service, METHODID_LIST_DEVICES))).addMethod(getGetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>(service, METHODID_GET_DEVICE))).addMethod(getSetDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_SET_DEVICE))).addMethod(getRemoveDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_DEVICE))).addMethod(getGetDeviceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>(service, METHODID_GET_DEVICE_EVENTS))).addMethod(getSelectDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(service, METHODID_SELECT_DEVICE))).addMethod(getListEndPointNamesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(service, METHODID_LIST_END_POINT_NAMES))).addMethod(getListLinkIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>(service, METHODID_LIST_LINK_IDS))).addMethod(getListLinksMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>(service, METHODID_LIST_LINKS))).addMethod(getGetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>(service, METHODID_GET_LINK))).addMethod(getSetLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>(service, METHODID_SET_LINK))).addMethod(getRemoveLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_LINK))).addMethod(getGetLinkEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>(service, METHODID_GET_LINK_EVENTS))).addMethod(getListServiceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>(service, METHODID_LIST_SERVICE_IDS))).addMethod(getListServicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>(service, METHODID_LIST_SERVICES))).addMethod(getGetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>(service, METHODID_GET_SERVICE))).addMethod(getSetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_SET_SERVICE))).addMethod(getUnsetServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(service, METHODID_UNSET_SERVICE))).addMethod(getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SERVICE))).addMethod(getGetServiceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>(service, METHODID_GET_SERVICE_EVENTS))).addMethod(getSelectServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(service, METHODID_SELECT_SERVICE))).addMethod(getListSliceIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(service, METHODID_LIST_SLICE_IDS))).addMethod(getListSlicesMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(service, METHODID_LIST_SLICES))).addMethod(getGetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(service, METHODID_GET_SLICE))).addMethod(getSetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_SET_SLICE))).addMethod(getUnsetSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(service, METHODID_UNSET_SLICE))).addMethod(getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_SLICE))).addMethod(getGetSliceEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(service, METHODID_GET_SLICE_EVENTS))).addMethod(getSelectSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(service, METHODID_SELECT_SLICE))).addMethod(getListConnectionIdsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(service, METHODID_LIST_CONNECTION_IDS))).addMethod(getListConnectionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(service, METHODID_LIST_CONNECTIONS))).addMethod(getGetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(service, METHODID_GET_CONNECTION))).addMethod(getSetConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(service, METHODID_SET_CONNECTION))).addMethod(getRemoveConnectionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(service, METHODID_REMOVE_CONNECTION))).addMethod(getGetConnectionEventsMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(service, METHODID_GET_CONNECTION_EVENTS))).addMethod(getGetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(service, METHODID_GET_OPTICAL_CONFIG))).addMethod(getSetOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_SET_OPTICAL_CONFIG))).addMethod(getUpdateOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(service, METHODID_UPDATE_OPTICAL_CONFIG))).addMethod(getSelectOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(service, METHODID_SELECT_OPTICAL_CONFIG))).addMethod(getDeleteOpticalConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_CONFIG))).addMethod(getDeleteOpticalChannelMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_CHANNEL))).addMethod(getSetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(service, METHODID_SET_OPTICAL_LINK))).addMethod(getGetOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>(service, METHODID_GET_OPTICAL_LINK))).addMethod(getDeleteOpticalLinkMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_OPTICAL_LINK))).addMethod(getGetOpticalLinkListMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>(service, METHODID_GET_OPTICAL_LINK_LIST))).addMethod(getDeleteServiceConfigRuleMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>(service, METHODID_DELETE_SERVICE_CONFIG_RULE))).build();
+    }
+
     private static abstract class ContextServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
 
         ContextServiceBaseDescriptorSupplier() {
@@ -2571,7 +2805,7 @@ public final class ContextServiceGrpc {
             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(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).addMethod(getGetOpticalConfigMethod()).addMethod(getSetOpticalConfigMethod()).addMethod(getSelectOpticalConfigMethod()).addMethod(getSetOpticalLinkMethod()).addMethod(getGetOpticalLinkMethod()).addMethod(getGetFiberMethod()).build();
+                    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(getGetTopologyDetailsMethod()).addMethod(getSetTopologyMethod()).addMethod(getRemoveTopologyMethod()).addMethod(getGetTopologyEventsMethod()).addMethod(getListDeviceIdsMethod()).addMethod(getListDevicesMethod()).addMethod(getGetDeviceMethod()).addMethod(getSetDeviceMethod()).addMethod(getRemoveDeviceMethod()).addMethod(getGetDeviceEventsMethod()).addMethod(getSelectDeviceMethod()).addMethod(getListEndPointNamesMethod()).addMethod(getListLinkIdsMethod()).addMethod(getListLinksMethod()).addMethod(getGetLinkMethod()).addMethod(getSetLinkMethod()).addMethod(getRemoveLinkMethod()).addMethod(getGetLinkEventsMethod()).addMethod(getListServiceIdsMethod()).addMethod(getListServicesMethod()).addMethod(getGetServiceMethod()).addMethod(getSetServiceMethod()).addMethod(getUnsetServiceMethod()).addMethod(getRemoveServiceMethod()).addMethod(getGetServiceEventsMethod()).addMethod(getSelectServiceMethod()).addMethod(getListSliceIdsMethod()).addMethod(getListSlicesMethod()).addMethod(getGetSliceMethod()).addMethod(getSetSliceMethod()).addMethod(getUnsetSliceMethod()).addMethod(getRemoveSliceMethod()).addMethod(getGetSliceEventsMethod()).addMethod(getSelectSliceMethod()).addMethod(getListConnectionIdsMethod()).addMethod(getListConnectionsMethod()).addMethod(getGetConnectionMethod()).addMethod(getSetConnectionMethod()).addMethod(getRemoveConnectionMethod()).addMethod(getGetConnectionEventsMethod()).addMethod(getGetOpticalConfigMethod()).addMethod(getSetOpticalConfigMethod()).addMethod(getUpdateOpticalConfigMethod()).addMethod(getSelectOpticalConfigMethod()).addMethod(getDeleteOpticalConfigMethod()).addMethod(getDeleteOpticalChannelMethod()).addMethod(getSetOpticalLinkMethod()).addMethod(getGetOpticalLinkMethod()).addMethod(getDeleteOpticalLinkMethod()).addMethod(getGetOpticalLinkListMethod()).addMethod(getDeleteServiceConfigRuleMethod()).build();
                 }
             }
         }
diff --git a/src/ztp/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/ztp/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
index c6dbb1e92554dea8ee8d25b01bf87dd2cfa32551..b97952a61921e3eb7429e96c36b7a294d921d221 100644
--- a/src/ztp/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
+++ b/src/ztp/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -216,20 +216,40 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalConfig);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::updateOpticalConfig);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::selectOpticalConfig);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalConfig);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalChannel);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::setOpticalLink);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalLink);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
-            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getFiber);
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteOpticalLink);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::getOpticalLinkList);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
+            return io.quarkus.grpc.stubs.ClientCalls.oneToOne(request, delegateStub::deleteServiceConfigRule);
         }
 
         public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
@@ -456,19 +476,39 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfigId> updateOpticalConfig(context.ContextOuterClass.OpticalConfig request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalConfig> selectOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalConfig(context.ContextOuterClass.OpticalConfigId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalChannel(context.ContextOuterClass.OpticalConfig request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> setOpticalLink(context.ContextOuterClass.OpticalLink request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.OpticalLinkId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLink> getOpticalLink(context.ContextOuterClass.LinkId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
-        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Fiber> getFiber(context.ContextOuterClass.FiberId request) {
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteOpticalLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.OpticalLinkList> getOpticalLinkList(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteServiceConfigRule(context.ContextOuterClass.ServiceConfigRule request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -502,7 +542,7 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
         @java.lang.Override
         public 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.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, 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.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, 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.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_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))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, compression))).addMethod(context.ContextServiceGrpc.getListConnectionIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(this, METHODID_LIST_CONNECTION_IDS, compression))).addMethod(context.ContextServiceGrpc.getListConnectionsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(this, METHODID_LIST_CONNECTIONS, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(this, METHODID_GET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getSetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(this, METHODID_SET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getRemoveConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(this, METHODID_GET_CONNECTION_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSelectOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetFiberMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.FiberId, context.ContextOuterClass.Fiber>(this, METHODID_GET_FIBER, compression))).build();
+            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.getGetTopologyDetailsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>(this, METHODID_GET_TOPOLOGY_DETAILS, 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.getSelectDeviceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>(this, METHODID_SELECT_DEVICE, compression))).addMethod(context.ContextServiceGrpc.getListEndPointNamesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>(this, METHODID_LIST_END_POINT_NAMES, 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.getUnsetServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>(this, METHODID_UNSET_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))).addMethod(context.ContextServiceGrpc.getSelectServiceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>(this, METHODID_SELECT_SERVICE, compression))).addMethod(context.ContextServiceGrpc.getListSliceIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceIdList>(this, METHODID_LIST_SLICE_IDS, compression))).addMethod(context.ContextServiceGrpc.getListSlicesMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ContextId, context.ContextOuterClass.SliceList>(this, METHODID_LIST_SLICES, compression))).addMethod(context.ContextServiceGrpc.getGetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Slice>(this, METHODID_GET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getSetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_SET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getUnsetSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>(this, METHODID_UNSET_SLICE, compression))).addMethod(context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_SLICE, compression))).addMethod(context.ContextServiceGrpc.getGetSliceEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.SliceEvent>(this, METHODID_GET_SLICE_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getSelectSliceMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>(this, METHODID_SELECT_SLICE, compression))).addMethod(context.ContextServiceGrpc.getListConnectionIdsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionIdList>(this, METHODID_LIST_CONNECTION_IDS, compression))).addMethod(context.ContextServiceGrpc.getListConnectionsMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceId, context.ContextOuterClass.ConnectionList>(this, METHODID_LIST_CONNECTIONS, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Connection>(this, METHODID_GET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getSetConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Connection, context.ContextOuterClass.ConnectionId>(this, METHODID_SET_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getRemoveConnectionMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ConnectionId, context.ContextOuterClass.Empty>(this, METHODID_REMOVE_CONNECTION, compression))).addMethod(context.ContextServiceGrpc.getGetConnectionEventsMethod(), asyncServerStreamingCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.ConnectionEvent>(this, METHODID_GET_CONNECTION_EVENTS, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalConfigList>(this, METHODID_GET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_SET_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getUpdateOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.OpticalConfigId>(this, METHODID_UPDATE_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getSelectOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.OpticalConfig>(this, METHODID_SELECT_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalConfigMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfigId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_CONFIG, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalChannelMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalConfig, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_CHANNEL, compression))).addMethod(context.ContextServiceGrpc.getSetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.OpticalLink, context.ContextOuterClass.Empty>(this, METHODID_SET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.OpticalLink>(this, METHODID_GET_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getDeleteOpticalLinkMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_OPTICAL_LINK, compression))).addMethod(context.ContextServiceGrpc.getGetOpticalLinkListMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, context.ContextOuterClass.OpticalLinkList>(this, METHODID_GET_OPTICAL_LINK_LIST, compression))).addMethod(context.ContextServiceGrpc.getDeleteServiceConfigRuleMethod(), asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.ServiceConfigRule, context.ContextOuterClass.Empty>(this, METHODID_DELETE_SERVICE_CONFIG_RULE, compression))).build();
         }
     }
 
@@ -608,13 +648,23 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
 
     private static final int METHODID_SET_OPTICAL_CONFIG = 50;
 
-    private static final int METHODID_SELECT_OPTICAL_CONFIG = 51;
+    private static final int METHODID_UPDATE_OPTICAL_CONFIG = 51;
+
+    private static final int METHODID_SELECT_OPTICAL_CONFIG = 52;
+
+    private static final int METHODID_DELETE_OPTICAL_CONFIG = 53;
 
-    private static final int METHODID_SET_OPTICAL_LINK = 52;
+    private static final int METHODID_DELETE_OPTICAL_CHANNEL = 54;
 
-    private static final int METHODID_GET_OPTICAL_LINK = 53;
+    private static final int METHODID_SET_OPTICAL_LINK = 55;
 
-    private static final int METHODID_GET_FIBER = 54;
+    private static final int METHODID_GET_OPTICAL_LINK = 56;
+
+    private static final int METHODID_DELETE_OPTICAL_LINK = 57;
+
+    private static final int METHODID_GET_OPTICAL_LINK_LIST = 58;
+
+    private static final int METHODID_DELETE_SERVICE_CONFIG_RULE = 59;
 
     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> {
 
@@ -787,17 +837,32 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.MutinyGrp
                 case METHODID_SET_OPTICAL_CONFIG:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver, compression, serviceImpl::setOpticalConfig);
                     break;
+                case METHODID_UPDATE_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfigId>) responseObserver, compression, serviceImpl::updateOpticalConfig);
+                    break;
                 case METHODID_SELECT_OPTICAL_CONFIG:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalConfig>) responseObserver, compression, serviceImpl::selectOpticalConfig);
                     break;
+                case METHODID_DELETE_OPTICAL_CONFIG:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfigId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalConfig);
+                    break;
+                case METHODID_DELETE_OPTICAL_CHANNEL:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalConfig) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalChannel);
+                    break;
                 case METHODID_SET_OPTICAL_LINK:
                     io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLink) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::setOpticalLink);
                     break;
                 case METHODID_GET_OPTICAL_LINK:
-                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.OpticalLinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver, compression, serviceImpl::getOpticalLink);
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLink>) responseObserver, compression, serviceImpl::getOpticalLink);
+                    break;
+                case METHODID_DELETE_OPTICAL_LINK:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteOpticalLink);
+                    break;
+                case METHODID_GET_OPTICAL_LINK_LIST:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.OpticalLinkList>) responseObserver, compression, serviceImpl::getOpticalLinkList);
                     break;
-                case METHODID_GET_FIBER:
-                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.FiberId) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Fiber>) responseObserver, compression, serviceImpl::getFiber);
+                case METHODID_DELETE_SERVICE_CONFIG_RULE:
+                    io.quarkus.grpc.stubs.ServerCalls.oneToOne((context.ContextOuterClass.ServiceConfigRule) request, (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver, compression, serviceImpl::deleteServiceConfigRule);
                     break;
                 default:
                     throw new java.lang.AssertionError();
diff --git a/src/ztp/target/generated-sources/grpc/device/Device.java b/src/ztp/target/generated-sources/grpc/device/Device.java
index 93bd490405da36c7ee2f26121e5abd94c3ec13a5..53ac328d63c864c382dea28aa7d9202939f49cac 100644
--- a/src/ztp/target/generated-sources/grpc/device/Device.java
+++ b/src/ztp/target/generated-sources/grpc/device/Device.java
@@ -18,35 +18,59 @@ public final class Device {
     com.google.protobuf.MessageOrBuilder {
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          * @return Whether the kpiId field is set.
          */
         boolean hasKpiId();
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          * @return The kpiId.
          */
         monitoring.Monitoring.KpiId getKpiId();
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          */
         monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          * @return Whether the kpiDescriptor field is set.
          */
         boolean hasKpiDescriptor();
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          * @return The kpiDescriptor.
          */
         monitoring.Monitoring.KpiDescriptor getKpiDescriptor();
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          */
         monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder();
@@ -86,80 +110,6 @@ public final class Device {
             return new MonitoringSettings();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private MonitoringSettings(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:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                monitoring.Monitoring.KpiDescriptor.Builder subBuilder = null;
-                                if (kpiDescriptor_ != null) {
-                                    subBuilder = kpiDescriptor_.toBuilder();
-                                }
-                                kpiDescriptor_ = input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiDescriptor_);
-                                    kpiDescriptor_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 29:
-                            {
-                                samplingDurationS_ = input.readFloat();
-                                break;
-                            }
-                        case 37:
-                            {
-                                samplingIntervalS_ = input.readFloat();
-                                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 device.Device.internal_static_device_MonitoringSettings_descriptor;
         }
@@ -174,6 +124,10 @@ public final class Device {
         private monitoring.Monitoring.KpiId kpiId_;
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          * @return Whether the kpiId field is set.
          */
@@ -183,6 +137,10 @@ public final class Device {
         }
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          * @return The kpiId.
          */
@@ -192,11 +150,15 @@ public final class Device {
         }
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiId"
+         * </pre>
+         *
          * <code>.monitoring.KpiId kpi_id = 1;</code>
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int KPI_DESCRIPTOR_FIELD_NUMBER = 2;
@@ -204,6 +166,10 @@ public final class Device {
         private monitoring.Monitoring.KpiDescriptor kpiDescriptor_;
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          * @return Whether the kpiDescriptor field is set.
          */
@@ -213,6 +179,10 @@ public final class Device {
         }
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          * @return The kpiDescriptor.
          */
@@ -222,16 +192,20 @@ public final class Device {
         }
 
         /**
+         * <pre>
+         * to be migrated to: "kpi_manager.KpiDescriptor"
+         * </pre>
+         *
          * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder() {
-            return getKpiDescriptor();
+            return kpiDescriptor_ == null ? monitoring.Monitoring.KpiDescriptor.getDefaultInstance() : kpiDescriptor_;
         }
 
         public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3;
 
-        private float samplingDurationS_;
+        private float samplingDurationS_ = 0F;
 
         /**
          * <code>float sampling_duration_s = 3;</code>
@@ -244,7 +218,7 @@ public final class Device {
 
         public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4;
 
-        private float samplingIntervalS_;
+        private float samplingIntervalS_ = 0F;
 
         /**
          * <code>float sampling_interval_s = 4;</code>
@@ -276,13 +250,13 @@ public final class Device {
             if (kpiDescriptor_ != null) {
                 output.writeMessage(2, getKpiDescriptor());
             }
-            if (samplingDurationS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingDurationS_) != 0) {
                 output.writeFloat(3, samplingDurationS_);
             }
-            if (samplingIntervalS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingIntervalS_) != 0) {
                 output.writeFloat(4, samplingIntervalS_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -297,13 +271,13 @@ public final class Device {
             if (kpiDescriptor_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKpiDescriptor());
             }
-            if (samplingDurationS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingDurationS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, samplingDurationS_);
             }
-            if (samplingIntervalS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingIntervalS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(4, samplingIntervalS_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -333,7 +307,7 @@ public final class Device {
                 return false;
             if (java.lang.Float.floatToIntBits(getSamplingIntervalS()) != java.lang.Float.floatToIntBits(other.getSamplingIntervalS()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -357,7 +331,7 @@ public final class Device {
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getSamplingDurationS());
             hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getSamplingIntervalS());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -451,32 +425,24 @@ public final class Device {
 
             // Construct using device.Device.MonitoringSettings.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 (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
-                if (kpiDescriptorBuilder_ == null) {
-                    kpiDescriptor_ = null;
-                } else {
-                    kpiDescriptor_ = null;
+                kpiDescriptor_ = null;
+                if (kpiDescriptorBuilder_ != null) {
+                    kpiDescriptorBuilder_.dispose();
                     kpiDescriptorBuilder_ = null;
                 }
                 samplingDurationS_ = 0F;
@@ -506,50 +472,27 @@ public final class Device {
             @java.lang.Override
             public device.Device.MonitoringSettings buildPartial() {
                 device.Device.MonitoringSettings result = new device.Device.MonitoringSettings(this);
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
-                }
-                if (kpiDescriptorBuilder_ == null) {
-                    result.kpiDescriptor_ = kpiDescriptor_;
-                } else {
-                    result.kpiDescriptor_ = kpiDescriptorBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.samplingDurationS_ = samplingDurationS_;
-                result.samplingIntervalS_ = samplingIntervalS_;
                 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);
+            private void buildPartial0(device.Device.MonitoringSettings result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiDescriptor_ = kpiDescriptorBuilder_ == null ? kpiDescriptor_ : kpiDescriptorBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.samplingDurationS_ = samplingDurationS_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.samplingIntervalS_ = samplingIntervalS_;
+                }
             }
 
             @java.lang.Override
@@ -577,7 +520,7 @@ public final class Device {
                 if (other.getSamplingIntervalS() != 0F) {
                     setSamplingIntervalS(other.getSamplingIntervalS());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -589,33 +532,89 @@ public final class Device {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                device.Device.MonitoringSettings parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getKpiDescriptorFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 29:
+                                {
+                                    samplingDurationS_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            case 37:
+                                {
+                                    samplingIntervalS_ = input.readFloat();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 37
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (device.Device.MonitoringSettings) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.KpiId kpiId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              * @return The kpiId.
              */
@@ -628,6 +627,10 @@ public final class Device {
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder setKpiId(monitoring.Monitoring.KpiId value) {
@@ -636,66 +639,90 @@ public final class Device {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
@@ -707,6 +734,10 @@ public final class Device {
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiId"
+             * </pre>
+             *
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> getKpiIdFieldBuilder() {
@@ -722,14 +753,22 @@ public final class Device {
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorBuilder_;
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              * @return Whether the kpiDescriptor field is set.
              */
             public boolean hasKpiDescriptor() {
-                return kpiDescriptorBuilder_ != null || kpiDescriptor_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              * @return The kpiDescriptor.
              */
@@ -742,6 +781,10 @@ public final class Device {
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public Builder setKpiDescriptor(monitoring.Monitoring.KpiDescriptor value) {
@@ -750,66 +793,90 @@ public final class Device {
                         throw new NullPointerException();
                     }
                     kpiDescriptor_ = value;
-                    onChanged();
                 } else {
                     kpiDescriptorBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public Builder setKpiDescriptor(monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
                 if (kpiDescriptorBuilder_ == null) {
                     kpiDescriptor_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiDescriptorBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public Builder mergeKpiDescriptor(monitoring.Monitoring.KpiDescriptor value) {
                 if (kpiDescriptorBuilder_ == null) {
-                    if (kpiDescriptor_ != null) {
-                        kpiDescriptor_ = monitoring.Monitoring.KpiDescriptor.newBuilder(kpiDescriptor_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && kpiDescriptor_ != null && kpiDescriptor_ != monitoring.Monitoring.KpiDescriptor.getDefaultInstance()) {
+                        getKpiDescriptorBuilder().mergeFrom(value);
                     } else {
                         kpiDescriptor_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiDescriptorBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public Builder clearKpiDescriptor() {
-                if (kpiDescriptorBuilder_ == null) {
-                    kpiDescriptor_ = null;
-                    onChanged();
-                } else {
-                    kpiDescriptor_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                kpiDescriptor_ = null;
+                if (kpiDescriptorBuilder_ != null) {
+                    kpiDescriptorBuilder_.dispose();
                     kpiDescriptorBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getKpiDescriptorFieldBuilder().getBuilder();
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder() {
@@ -821,6 +888,10 @@ public final class Device {
             }
 
             /**
+             * <pre>
+             * to be migrated to: "kpi_manager.KpiDescriptor"
+             * </pre>
+             *
              * <code>.monitoring.KpiDescriptor kpi_descriptor = 2;</code>
              */
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> getKpiDescriptorFieldBuilder() {
@@ -849,6 +920,7 @@ public final class Device {
              */
             public Builder setSamplingDurationS(float value) {
                 samplingDurationS_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -858,6 +930,7 @@ public final class Device {
              * @return This builder for chaining.
              */
             public Builder clearSamplingDurationS() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 samplingDurationS_ = 0F;
                 onChanged();
                 return this;
@@ -881,6 +954,7 @@ public final class Device {
              */
             public Builder setSamplingIntervalS(float value) {
                 samplingIntervalS_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -890,6 +964,7 @@ public final class Device {
              * @return This builder for chaining.
              */
             public Builder clearSamplingIntervalS() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 samplingIntervalS_ = 0F;
                 onChanged();
                 return this;
@@ -922,7 +997,17 @@ public final class Device {
 
             @java.lang.Override
             public MonitoringSettings parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new MonitoringSettings(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
diff --git a/src/ztp/target/generated-sources/grpc/device/DeviceServiceGrpc.java b/src/ztp/target/generated-sources/grpc/device/DeviceServiceGrpc.java
index a6886d8d620182790146164fbfef36762cf4368b..7e0cf9a8bb4cc207f65ce27177f7307567a19f04 100644
--- a/src/ztp/target/generated-sources/grpc/device/DeviceServiceGrpc.java
+++ b/src/ztp/target/generated-sources/grpc/device/DeviceServiceGrpc.java
@@ -4,7 +4,8 @@ import static io.grpc.MethodDescriptor.generateFullMethodName;
 
 /**
  */
-@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.38.1)", comments = "Source: device.proto")
+@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.55.1)", comments = "Source: device.proto")
+@io.grpc.stub.annotations.GrpcGenerated
 public final class DeviceServiceGrpc {
 
     private DeviceServiceGrpc() {
@@ -132,45 +133,52 @@ public final class DeviceServiceGrpc {
 
     /**
      */
-    public static abstract class DeviceServiceImplBase implements io.grpc.BindableService {
+    public interface AsyncService {
 
         /**
          */
-        public void addDevice(context.ContextOuterClass.Device request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+        default void addDevice(context.ContextOuterClass.Device request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getAddDeviceMethod(), responseObserver);
         }
 
         /**
          */
-        public void configureDevice(context.ContextOuterClass.Device request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+        default void configureDevice(context.ContextOuterClass.Device request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getConfigureDeviceMethod(), responseObserver);
         }
 
         /**
          */
-        public void deleteDevice(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void deleteDevice(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteDeviceMethod(), responseObserver);
         }
 
         /**
          */
-        public void getInitialConfig(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig> responseObserver) {
+        default void getInitialConfig(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInitialConfigMethod(), responseObserver);
         }
 
         /**
          */
-        public void monitorDeviceKpi(device.Device.MonitoringSettings request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void monitorDeviceKpi(device.Device.MonitoringSettings request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getMonitorDeviceKpiMethod(), responseObserver);
         }
+    }
+
+    /**
+     * Base class for the server implementation of the service DeviceService.
+     */
+    public static abstract class DeviceServiceImplBase implements io.grpc.BindableService, AsyncService {
 
         @java.lang.Override
         public io.grpc.ServerServiceDefinition bindService() {
-            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getAddDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(this, METHODID_ADD_DEVICE))).addMethod(getConfigureDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(this, METHODID_CONFIGURE_DEVICE))).addMethod(getDeleteDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_DEVICE))).addMethod(getGetInitialConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceConfig>(this, METHODID_GET_INITIAL_CONFIG))).addMethod(getMonitorDeviceKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<device.Device.MonitoringSettings, context.ContextOuterClass.Empty>(this, METHODID_MONITOR_DEVICE_KPI))).build();
+            return DeviceServiceGrpc.bindService(this);
         }
     }
 
     /**
+     * A stub to allow clients to do asynchronous rpc calls to service DeviceService.
      */
     public static class DeviceServiceStub extends io.grpc.stub.AbstractAsyncStub<DeviceServiceStub> {
 
@@ -215,6 +223,7 @@ public final class DeviceServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do synchronous rpc calls to service DeviceService.
      */
     public static class DeviceServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<DeviceServiceBlockingStub> {
 
@@ -259,6 +268,7 @@ public final class DeviceServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do ListenableFuture-style rpc calls to service DeviceService.
      */
     public static class DeviceServiceFutureStub extends io.grpc.stub.AbstractFutureStub<DeviceServiceFutureStub> {
 
@@ -314,11 +324,11 @@ public final class DeviceServiceGrpc {
 
     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 DeviceServiceImplBase serviceImpl;
+        private final AsyncService serviceImpl;
 
         private final int methodId;
 
-        MethodHandlers(DeviceServiceImplBase serviceImpl, int methodId) {
+        MethodHandlers(AsyncService serviceImpl, int methodId) {
             this.serviceImpl = serviceImpl;
             this.methodId = methodId;
         }
@@ -357,6 +367,10 @@ public final class DeviceServiceGrpc {
         }
     }
 
+    public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getAddDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_ADD_DEVICE))).addMethod(getConfigureDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>(service, METHODID_CONFIGURE_DEVICE))).addMethod(getDeleteDeviceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_DEVICE))).addMethod(getGetInitialConfigMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceConfig>(service, METHODID_GET_INITIAL_CONFIG))).addMethod(getMonitorDeviceKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<device.Device.MonitoringSettings, context.ContextOuterClass.Empty>(service, METHODID_MONITOR_DEVICE_KPI))).build();
+    }
+
     private static abstract class DeviceServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
 
         DeviceServiceBaseDescriptorSupplier() {
diff --git a/src/ztp/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/ztp/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
index 9621efb4beed8543be18a4bd369de73f52b2e076..2a8a6259344e802f5c2f23d0a475ed13ca72f682 100644
--- a/src/ztp/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
+++ b/src/ztp/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -95,6 +95,38 @@ public final class KpiSampleTypes {
          * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS = 701;</code>
          */
         KPISAMPLETYPE_SERVICE_LATENCY_MS(701),
+        /**
+         * <pre>
+         * output KPIs
+         * </pre>
+         *
+         * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT = 1101;</code>
+         */
+        KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT(1101),
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT = 1102;</code>
+         */
+        KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT(1102),
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT = 1103;</code>
+         */
+        KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT(1103),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT = 1201;</code>
+         */
+        KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT(1201),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT = 1202;</code>
+         */
+        KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT(1202),
+        /**
+         * <code>KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT = 1203;</code>
+         */
+        KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT(1203),
+        /**
+         * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT = 1701;</code>
+         */
+        KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT(1701),
         UNRECOGNIZED(-1);
 
         /**
@@ -190,6 +222,45 @@ public final class KpiSampleTypes {
          */
         public static final int KPISAMPLETYPE_SERVICE_LATENCY_MS_VALUE = 701;
 
+        /**
+         * <pre>
+         * output KPIs
+         * </pre>
+         *
+         * <code>KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT = 1101;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT_VALUE = 1101;
+
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT = 1102;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT_VALUE = 1102;
+
+        /**
+         * <code>KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT = 1103;</code>
+         */
+        public static final int KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT_VALUE = 1103;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT = 1201;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT_VALUE = 1201;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT = 1202;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT_VALUE = 1202;
+
+        /**
+         * <code>KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT = 1203;</code>
+         */
+        public static final int KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT_VALUE = 1203;
+
+        /**
+         * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT = 1701;</code>
+         */
+        public static final int KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT_VALUE = 1701;
+
         public final int getNumber() {
             if (this == UNRECOGNIZED) {
                 throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value.");
@@ -247,6 +318,20 @@ public final class KpiSampleTypes {
                     return KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO;
                 case 701:
                     return KPISAMPLETYPE_SERVICE_LATENCY_MS;
+                case 1101:
+                    return KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT;
+                case 1102:
+                    return KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT;
+                case 1103:
+                    return KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT;
+                case 1201:
+                    return KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT;
+                case 1202:
+                    return KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT;
+                case 1203:
+                    return KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT;
+                case 1701:
+                    return KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT;
                 default:
                     return null;
             }
@@ -304,7 +389,7 @@ public final class KpiSampleTypes {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" + "es*\260\005\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" + "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" + "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" + "\020f\022!\n\035KPISAMPLETYPE_PACKETS_DROPPED\020g\022$\n" + "\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001\022!\n\034K" + "PISAMPLETYPE_BYTES_RECEIVED\020\312\001\022 \n\033KPISAM" + "PLETYPE_BYTES_DROPPED\020\313\001\022+\n&KPISAMPLETYP" + "E_LINK_TOTAL_CAPACITY_GBPS\020\255\002\022*\n%KPISAMP" + "LETYPE_LINK_USED_CAPACITY_GBPS\020\256\002\022 \n\033KPI" + "SAMPLETYPE_ML_CONFIDENCE\020\221\003\022*\n%KPISAMPLE" + "TYPE_OPTICAL_SECURITY_STATUS\020\365\003\022)\n$KPISA" + "MPLETYPE_L3_UNIQUE_ATTACK_CONNS\020\331\004\022*\n%KP" + "ISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS\020\332\004\022&" + "\n!KPISAMPLETYPE_L3_UNIQUE_ATTACKERS\020\333\004\0220" + "\n+KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CL" + "IENTS\020\334\004\022,\n\'KPISAMPLETYPE_L3_SECURITY_ST" + "ATUS_CRYPTO\020\335\004\022%\n KPISAMPLETYPE_SERVICE_" + "LATENCY_MS\020\275\005b\006proto3" };
+        java.lang.String[] descriptorData = { "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" + "es*\200\010\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" + "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" + "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" + "\020f\022!\n\035KPISAMPLETYPE_PACKETS_DROPPED\020g\022$\n" + "\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001\022!\n\034K" + "PISAMPLETYPE_BYTES_RECEIVED\020\312\001\022 \n\033KPISAM" + "PLETYPE_BYTES_DROPPED\020\313\001\022+\n&KPISAMPLETYP" + "E_LINK_TOTAL_CAPACITY_GBPS\020\255\002\022*\n%KPISAMP" + "LETYPE_LINK_USED_CAPACITY_GBPS\020\256\002\022 \n\033KPI" + "SAMPLETYPE_ML_CONFIDENCE\020\221\003\022*\n%KPISAMPLE" + "TYPE_OPTICAL_SECURITY_STATUS\020\365\003\022)\n$KPISA" + "MPLETYPE_L3_UNIQUE_ATTACK_CONNS\020\331\004\022*\n%KP" + "ISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS\020\332\004\022&" + "\n!KPISAMPLETYPE_L3_UNIQUE_ATTACKERS\020\333\004\0220" + "\n+KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CL" + "IENTS\020\334\004\022,\n\'KPISAMPLETYPE_L3_SECURITY_ST" + "ATUS_CRYPTO\020\335\004\022%\n KPISAMPLETYPE_SERVICE_" + "LATENCY_MS\020\275\005\0221\n,KPISAMPLETYPE_PACKETS_T" + "RANSMITTED_AGG_OUTPUT\020\315\010\022.\n)KPISAMPLETYP" + "E_PACKETS_RECEIVED_AGG_OUTPUT\020\316\010\022-\n(KPIS" + "AMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT\020\317\010\022" + "/\n*KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_O" + "UTPUT\020\261\t\022,\n\'KPISAMPLETYPE_BYTES_RECEIVED" + "_AGG_OUTPUT\020\262\t\022+\n&KPISAMPLETYPE_BYTES_DR" + "OPPED_AGG_OUTPUT\020\263\t\0220\n+KPISAMPLETYPE_SER" + "VICE_LATENCY_MS_AGG_OUTPUT\020\245\rb\006proto3" };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
     }
     // @@protoc_insertion_point(outer_class_scope)
diff --git a/src/ztp/target/generated-sources/grpc/monitoring/Monitoring.java b/src/ztp/target/generated-sources/grpc/monitoring/Monitoring.java
index 4c80f4a06fe9c1d408fe41a05056c76612a9c61e..2f98ce3eb35a8ba9fda3a6d6bf4c17079c720bbe 100644
--- a/src/ztp/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/ztp/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -211,160 +211,6 @@ public final class Monitoring {
             return new KpiDescriptor();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiDescriptor(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:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                kpiDescription_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                kpiIdList_.add(input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 32:
-                            {
-                                int rawValue = input.readEnum();
-                                kpiSampleType_ = rawValue;
-                                break;
-                            }
-                        case 42:
-                            {
-                                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 50:
-                            {
-                                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 58:
-                            {
-                                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 66:
-                            {
-                                context.ContextOuterClass.SliceId.Builder subBuilder = null;
-                                if (sliceId_ != null) {
-                                    subBuilder = sliceId_.toBuilder();
-                                }
-                                sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(sliceId_);
-                                    sliceId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 74:
-                            {
-                                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 82:
-                            {
-                                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 {
-                if (((mutable_bitField0_ & 0x00000001) != 0)) {
-                    kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_KpiDescriptor_descriptor;
         }
@@ -401,12 +247,13 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object kpiDescription_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object kpiDescription_ = "";
 
         /**
          * <code>string kpi_description = 2;</code>
@@ -443,6 +290,7 @@ public final class Monitoring {
 
         public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
 
         /**
@@ -487,7 +335,7 @@ public final class Monitoring {
 
         public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
 
-        private int kpiSampleType_;
+        private int kpiSampleType_ = 0;
 
         /**
          * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
@@ -504,8 +352,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-            @SuppressWarnings("deprecation")
-            kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+            kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.forNumber(kpiSampleType_);
             return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
         }
 
@@ -536,7 +383,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-            return getDeviceId();
+            return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
 
         public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
@@ -566,7 +413,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-            return getEndpointId();
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
         public static final int SERVICE_ID_FIELD_NUMBER = 7;
@@ -596,7 +443,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-            return getServiceId();
+            return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
 
         public static final int SLICE_ID_FIELD_NUMBER = 8;
@@ -626,7 +473,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-            return getSliceId();
+            return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
 
         public static final int CONNECTION_ID_FIELD_NUMBER = 9;
@@ -656,7 +503,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-            return getConnectionId();
+            return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
 
         public static final int LINK_ID_FIELD_NUMBER = 10;
@@ -686,7 +533,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-            return getLinkId();
+            return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -707,7 +554,7 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 output.writeMessage(1, getKpiId());
             }
-            if (!getKpiDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kpiDescription_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
             }
             for (int i = 0; i < kpiIdList_.size(); i++) {
@@ -734,7 +581,7 @@ public final class Monitoring {
             if (linkId_ != null) {
                 output.writeMessage(10, getLinkId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -746,7 +593,7 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getKpiId());
             }
-            if (!getKpiDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(kpiDescription_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
             }
             for (int i = 0; i < kpiIdList_.size(); i++) {
@@ -773,7 +620,7 @@ public final class Monitoring {
             if (linkId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getLinkId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -835,7 +682,7 @@ public final class Monitoring {
                 if (!getLinkId().equals(other.getLinkId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -883,7 +730,7 @@ public final class Monitoring {
                 hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getLinkId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -977,71 +824,58 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiDescriptor.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getKpiIdListFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
                 kpiDescription_ = "";
                 if (kpiIdListBuilder_ == null) {
                     kpiIdList_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    kpiIdList_ = null;
                     kpiIdListBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000004);
                 kpiSampleType_ = 0;
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                } else {
-                    deviceId_ = null;
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                } else {
-                    endpointId_ = null;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                } else {
-                    serviceId_ = null;
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                } else {
-                    sliceId_ = null;
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                } else {
-                    connectionId_ = null;
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
-                if (linkIdBuilder_ == null) {
-                    linkId_ = null;
-                } else {
-                    linkId_ = null;
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
                 return this;
@@ -1069,85 +903,55 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiDescriptor buildPartial() {
                 monitoring.Monitoring.KpiDescriptor result = new monitoring.Monitoring.KpiDescriptor(this);
-                int from_bitField0_ = bitField0_;
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.kpiDescription_ = kpiDescription_;
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.KpiDescriptor result) {
                 if (kpiIdListBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000004) != 0)) {
                         kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000004);
                     }
                     result.kpiIdList_ = kpiIdList_;
                 } else {
                     result.kpiIdList_ = kpiIdListBuilder_.build();
                 }
-                result.kpiSampleType_ = kpiSampleType_;
-                if (deviceIdBuilder_ == null) {
-                    result.deviceId_ = deviceId_;
-                } else {
-                    result.deviceId_ = deviceIdBuilder_.build();
+            }
+
+            private void buildPartial0(monitoring.Monitoring.KpiDescriptor result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
                 }
-                if (endpointIdBuilder_ == null) {
-                    result.endpointId_ = endpointId_;
-                } else {
-                    result.endpointId_ = endpointIdBuilder_.build();
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiDescription_ = kpiDescription_;
                 }
-                if (serviceIdBuilder_ == null) {
-                    result.serviceId_ = serviceId_;
-                } else {
-                    result.serviceId_ = serviceIdBuilder_.build();
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.kpiSampleType_ = kpiSampleType_;
                 }
-                if (sliceIdBuilder_ == null) {
-                    result.sliceId_ = sliceId_;
-                } else {
-                    result.sliceId_ = sliceIdBuilder_.build();
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.deviceId_ = deviceIdBuilder_ == null ? deviceId_ : deviceIdBuilder_.build();
                 }
-                if (connectionIdBuilder_ == null) {
-                    result.connectionId_ = connectionId_;
-                } else {
-                    result.connectionId_ = connectionIdBuilder_.build();
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
                 }
-                if (linkIdBuilder_ == null) {
-                    result.linkId_ = linkId_;
-                } else {
-                    result.linkId_ = linkIdBuilder_.build();
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.serviceId_ = serviceIdBuilder_ == null ? serviceId_ : serviceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.sliceId_ = sliceIdBuilder_ == null ? sliceId_ : sliceIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.connectionId_ = connectionIdBuilder_ == null ? connectionId_ : connectionIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000200) != 0)) {
+                    result.linkId_ = linkIdBuilder_ == null ? 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
@@ -1168,13 +972,14 @@ public final class Monitoring {
                 }
                 if (!other.getKpiDescription().isEmpty()) {
                     kpiDescription_ = other.kpiDescription_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (kpiIdListBuilder_ == null) {
                     if (!other.kpiIdList_.isEmpty()) {
                         if (kpiIdList_.isEmpty()) {
                             kpiIdList_ = other.kpiIdList_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                         } else {
                             ensureKpiIdListIsMutable();
                             kpiIdList_.addAll(other.kpiIdList_);
@@ -1187,7 +992,7 @@ public final class Monitoring {
                             kpiIdListBuilder_.dispose();
                             kpiIdListBuilder_ = null;
                             kpiIdList_ = other.kpiIdList_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000004);
                             kpiIdListBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getKpiIdListFieldBuilder() : null;
                         } else {
                             kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
@@ -1215,7 +1020,7 @@ public final class Monitoring {
                 if (other.hasLinkId()) {
                     mergeLinkId(other.getLinkId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -1227,17 +1032,110 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiDescriptor parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    kpiDescription_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    monitoring.Monitoring.KpiId m = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+                                    if (kpiIdListBuilder_ == null) {
+                                        ensureKpiIdListIsMutable();
+                                        kpiIdList_.add(m);
+                                    } else {
+                                        kpiIdListBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 26
+                            case 32:
+                                {
+                                    kpiSampleType_ = input.readEnum();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 42:
+                                {
+                                    input.readMessage(getDeviceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    input.readMessage(getServiceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    input.readMessage(getSliceIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    input.readMessage(getConnectionIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            case 82:
+                                {
+                                    input.readMessage(getLinkIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000200;
+                                    break;
+                                }
+                            // case 82
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiDescriptor) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -1252,7 +1150,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -1276,10 +1174,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1289,10 +1188,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1301,15 +1201,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1317,13 +1218,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -1331,6 +1232,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -1400,6 +1302,7 @@ public final class Monitoring {
                     throw new NullPointerException();
                 }
                 kpiDescription_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -1410,6 +1313,7 @@ public final class Monitoring {
              */
             public Builder clearKpiDescription() {
                 kpiDescription_ = getDefaultInstance().getKpiDescription();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -1425,6 +1329,7 @@ public final class Monitoring {
                 }
                 checkByteStringIsUtf8(value);
                 kpiDescription_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -1432,9 +1337,9 @@ public final class Monitoring {
             private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ = java.util.Collections.emptyList();
 
             private void ensureKpiIdListIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000004) != 0)) {
                     kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000004;
                 }
             }
 
@@ -1586,7 +1491,7 @@ public final class Monitoring {
             public Builder clearKpiIdList() {
                 if (kpiIdListBuilder_ == null) {
                     kpiIdList_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000004);
                     onChanged();
                 } else {
                     kpiIdListBuilder_.clear();
@@ -1660,7 +1565,7 @@ public final class Monitoring {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> getKpiIdListFieldBuilder() {
                 if (kpiIdListBuilder_ == null) {
-                    kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(kpiIdList_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(kpiIdList_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                     kpiIdList_ = null;
                 }
                 return kpiIdListBuilder_;
@@ -1684,6 +1589,7 @@ public final class Monitoring {
              */
             public Builder setKpiSampleTypeValue(int value) {
                 kpiSampleType_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -1694,8 +1600,7 @@ public final class Monitoring {
              */
             @java.lang.Override
             public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.forNumber(kpiSampleType_);
                 return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
             }
 
@@ -1708,6 +1613,7 @@ public final class Monitoring {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000008;
                 kpiSampleType_ = value.getNumber();
                 onChanged();
                 return this;
@@ -1718,6 +1624,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearKpiSampleType() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 kpiSampleType_ = 0;
                 onChanged();
                 return this;
@@ -1732,7 +1639,7 @@ public final class Monitoring {
              * @return Whether the deviceId field is set.
              */
             public boolean hasDeviceId() {
-                return deviceIdBuilder_ != null || deviceId_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -1756,10 +1663,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     deviceId_ = value;
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -1769,10 +1677,11 @@ public final class Monitoring {
             public Builder setDeviceId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (deviceIdBuilder_ == null) {
                     deviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     deviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -1781,15 +1690,16 @@ public final class Monitoring {
              */
             public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
                 if (deviceIdBuilder_ == null) {
-                    if (deviceId_ != null) {
-                        deviceId_ = context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && deviceId_ != null && deviceId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDeviceIdBuilder().mergeFrom(value);
                     } else {
                         deviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     deviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -1797,13 +1707,13 @@ public final class Monitoring {
              * <code>.context.DeviceId device_id = 5;</code>
              */
             public Builder clearDeviceId() {
-                if (deviceIdBuilder_ == null) {
-                    deviceId_ = null;
-                    onChanged();
-                } else {
-                    deviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                deviceId_ = null;
+                if (deviceIdBuilder_ != null) {
+                    deviceIdBuilder_.dispose();
                     deviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -1811,6 +1721,7 @@ public final class Monitoring {
              * <code>.context.DeviceId device_id = 5;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getDeviceIdFieldBuilder().getBuilder();
             }
@@ -1846,7 +1757,7 @@ public final class Monitoring {
              * @return Whether the endpointId field is set.
              */
             public boolean hasEndpointId() {
-                return endpointIdBuilder_ != null || endpointId_ != null;
+                return ((bitField0_ & 0x00000020) != 0);
             }
 
             /**
@@ -1870,10 +1781,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     endpointId_ = value;
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -1883,10 +1795,11 @@ public final class Monitoring {
             public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
                 if (endpointIdBuilder_ == null) {
                     endpointId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endpointIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -1895,15 +1808,16 @@ public final class Monitoring {
              */
             public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
                 if (endpointIdBuilder_ == null) {
-                    if (endpointId_ != null) {
-                        endpointId_ = context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000020) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
                     } else {
                         endpointId_ = value;
                     }
-                    onChanged();
                 } else {
                     endpointIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -1911,13 +1825,13 @@ public final class Monitoring {
              * <code>.context.EndPointId endpoint_id = 6;</code>
              */
             public Builder clearEndpointId() {
-                if (endpointIdBuilder_ == null) {
-                    endpointId_ = null;
-                    onChanged();
-                } else {
-                    endpointId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -1925,6 +1839,7 @@ public final class Monitoring {
              * <code>.context.EndPointId endpoint_id = 6;</code>
              */
             public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return getEndpointIdFieldBuilder().getBuilder();
             }
@@ -1960,7 +1875,7 @@ public final class Monitoring {
              * @return Whether the serviceId field is set.
              */
             public boolean hasServiceId() {
-                return serviceIdBuilder_ != null || serviceId_ != null;
+                return ((bitField0_ & 0x00000040) != 0);
             }
 
             /**
@@ -1984,10 +1899,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     serviceId_ = value;
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -1997,10 +1913,11 @@ public final class Monitoring {
             public Builder setServiceId(context.ContextOuterClass.ServiceId.Builder builderForValue) {
                 if (serviceIdBuilder_ == null) {
                     serviceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     serviceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -2009,15 +1926,16 @@ public final class Monitoring {
              */
             public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
                 if (serviceIdBuilder_ == null) {
-                    if (serviceId_ != null) {
-                        serviceId_ = context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000040) != 0) && serviceId_ != null && serviceId_ != context.ContextOuterClass.ServiceId.getDefaultInstance()) {
+                        getServiceIdBuilder().mergeFrom(value);
                     } else {
                         serviceId_ = value;
                     }
-                    onChanged();
                 } else {
                     serviceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000040;
+                onChanged();
                 return this;
             }
 
@@ -2025,13 +1943,13 @@ public final class Monitoring {
              * <code>.context.ServiceId service_id = 7;</code>
              */
             public Builder clearServiceId() {
-                if (serviceIdBuilder_ == null) {
-                    serviceId_ = null;
-                    onChanged();
-                } else {
-                    serviceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000040);
+                serviceId_ = null;
+                if (serviceIdBuilder_ != null) {
+                    serviceIdBuilder_.dispose();
                     serviceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2039,6 +1957,7 @@ public final class Monitoring {
              * <code>.context.ServiceId service_id = 7;</code>
              */
             public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+                bitField0_ |= 0x00000040;
                 onChanged();
                 return getServiceIdFieldBuilder().getBuilder();
             }
@@ -2074,7 +1993,7 @@ public final class Monitoring {
              * @return Whether the sliceId field is set.
              */
             public boolean hasSliceId() {
-                return sliceIdBuilder_ != null || sliceId_ != null;
+                return ((bitField0_ & 0x00000080) != 0);
             }
 
             /**
@@ -2098,10 +2017,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     sliceId_ = value;
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -2111,10 +2031,11 @@ public final class Monitoring {
             public Builder setSliceId(context.ContextOuterClass.SliceId.Builder builderForValue) {
                 if (sliceIdBuilder_ == null) {
                     sliceId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     sliceIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -2123,15 +2044,16 @@ public final class Monitoring {
              */
             public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
                 if (sliceIdBuilder_ == null) {
-                    if (sliceId_ != null) {
-                        sliceId_ = context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000080) != 0) && sliceId_ != null && sliceId_ != context.ContextOuterClass.SliceId.getDefaultInstance()) {
+                        getSliceIdBuilder().mergeFrom(value);
                     } else {
                         sliceId_ = value;
                     }
-                    onChanged();
                 } else {
                     sliceIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000080;
+                onChanged();
                 return this;
             }
 
@@ -2139,13 +2061,13 @@ public final class Monitoring {
              * <code>.context.SliceId slice_id = 8;</code>
              */
             public Builder clearSliceId() {
-                if (sliceIdBuilder_ == null) {
-                    sliceId_ = null;
-                    onChanged();
-                } else {
-                    sliceId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000080);
+                sliceId_ = null;
+                if (sliceIdBuilder_ != null) {
+                    sliceIdBuilder_.dispose();
                     sliceIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2153,6 +2075,7 @@ public final class Monitoring {
              * <code>.context.SliceId slice_id = 8;</code>
              */
             public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+                bitField0_ |= 0x00000080;
                 onChanged();
                 return getSliceIdFieldBuilder().getBuilder();
             }
@@ -2188,7 +2111,7 @@ public final class Monitoring {
              * @return Whether the connectionId field is set.
              */
             public boolean hasConnectionId() {
-                return connectionIdBuilder_ != null || connectionId_ != null;
+                return ((bitField0_ & 0x00000100) != 0);
             }
 
             /**
@@ -2212,10 +2135,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     connectionId_ = value;
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -2225,10 +2149,11 @@ public final class Monitoring {
             public Builder setConnectionId(context.ContextOuterClass.ConnectionId.Builder builderForValue) {
                 if (connectionIdBuilder_ == null) {
                     connectionId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     connectionIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -2237,15 +2162,16 @@ public final class Monitoring {
              */
             public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
                 if (connectionIdBuilder_ == null) {
-                    if (connectionId_ != null) {
-                        connectionId_ = context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000100) != 0) && connectionId_ != null && connectionId_ != context.ContextOuterClass.ConnectionId.getDefaultInstance()) {
+                        getConnectionIdBuilder().mergeFrom(value);
                     } else {
                         connectionId_ = value;
                     }
-                    onChanged();
                 } else {
                     connectionIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000100;
+                onChanged();
                 return this;
             }
 
@@ -2253,13 +2179,13 @@ public final class Monitoring {
              * <code>.context.ConnectionId connection_id = 9;</code>
              */
             public Builder clearConnectionId() {
-                if (connectionIdBuilder_ == null) {
-                    connectionId_ = null;
-                    onChanged();
-                } else {
-                    connectionId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000100);
+                connectionId_ = null;
+                if (connectionIdBuilder_ != null) {
+                    connectionIdBuilder_.dispose();
                     connectionIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2267,6 +2193,7 @@ public final class Monitoring {
              * <code>.context.ConnectionId connection_id = 9;</code>
              */
             public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+                bitField0_ |= 0x00000100;
                 onChanged();
                 return getConnectionIdFieldBuilder().getBuilder();
             }
@@ -2302,7 +2229,7 @@ public final class Monitoring {
              * @return Whether the linkId field is set.
              */
             public boolean hasLinkId() {
-                return linkIdBuilder_ != null || linkId_ != null;
+                return ((bitField0_ & 0x00000200) != 0);
             }
 
             /**
@@ -2326,10 +2253,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     linkId_ = value;
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -2339,10 +2267,11 @@ public final class Monitoring {
             public Builder setLinkId(context.ContextOuterClass.LinkId.Builder builderForValue) {
                 if (linkIdBuilder_ == null) {
                     linkId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     linkIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -2351,15 +2280,16 @@ public final class Monitoring {
              */
             public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
                 if (linkIdBuilder_ == null) {
-                    if (linkId_ != null) {
-                        linkId_ = context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000200) != 0) && linkId_ != null && linkId_ != context.ContextOuterClass.LinkId.getDefaultInstance()) {
+                        getLinkIdBuilder().mergeFrom(value);
                     } else {
                         linkId_ = value;
                     }
-                    onChanged();
                 } else {
                     linkIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000200;
+                onChanged();
                 return this;
             }
 
@@ -2367,13 +2297,13 @@ public final class Monitoring {
              * <code>.context.LinkId link_id = 10;</code>
              */
             public Builder clearLinkId() {
-                if (linkIdBuilder_ == null) {
-                    linkId_ = null;
-                    onChanged();
-                } else {
-                    linkId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000200);
+                linkId_ = null;
+                if (linkIdBuilder_ != null) {
+                    linkIdBuilder_.dispose();
                     linkIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2381,6 +2311,7 @@ public final class Monitoring {
              * <code>.context.LinkId link_id = 10;</code>
              */
             public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+                bitField0_ |= 0x00000200;
                 onChanged();
                 return getLinkIdFieldBuilder().getBuilder();
             }
@@ -2434,7 +2365,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiDescriptor parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiDescriptor(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -2512,74 +2453,13 @@ public final class Monitoring {
             return new MonitorKpiRequest();
         }
 
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        }
+
         @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private MonitorKpiRequest(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:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 21:
-                            {
-                                monitoringWindowS_ = input.readFloat();
-                                break;
-                            }
-                        case 29:
-                            {
-                                samplingRateS_ = input.readFloat();
-                                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 monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
-        }
-
-        @java.lang.Override
-        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
-            return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable.ensureFieldAccessorsInitialized(monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable.ensureFieldAccessorsInitialized(monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
         }
 
         public static final int KPI_ID_FIELD_NUMBER = 1;
@@ -2609,12 +2489,12 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
 
-        private float monitoringWindowS_;
+        private float monitoringWindowS_ = 0F;
 
         /**
          * <code>float monitoring_window_s = 2;</code>
@@ -2627,7 +2507,7 @@ public final class Monitoring {
 
         public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
 
-        private float samplingRateS_;
+        private float samplingRateS_ = 0F;
 
         /**
          * <pre>
@@ -2660,13 +2540,13 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 output.writeMessage(1, getKpiId());
             }
-            if (monitoringWindowS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(monitoringWindowS_) != 0) {
                 output.writeFloat(2, monitoringWindowS_);
             }
-            if (samplingRateS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingRateS_) != 0) {
                 output.writeFloat(3, samplingRateS_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -2678,13 +2558,13 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getKpiId());
             }
-            if (monitoringWindowS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(monitoringWindowS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, monitoringWindowS_);
             }
-            if (samplingRateS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingRateS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, samplingRateS_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -2708,7 +2588,7 @@ public final class Monitoring {
                 return false;
             if (java.lang.Float.floatToIntBits(getSamplingRateS()) != java.lang.Float.floatToIntBits(other.getSamplingRateS()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2728,7 +2608,7 @@ public final class Monitoring {
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getMonitoringWindowS());
             hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getSamplingRateS());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2822,26 +2702,19 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.MonitorKpiRequest.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 (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
                 monitoringWindowS_ = 0F;
@@ -2871,45 +2744,24 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
                 monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.monitoringWindowS_ = monitoringWindowS_;
-                result.samplingRateS_ = samplingRateS_;
                 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);
+            private void buildPartial0(monitoring.Monitoring.MonitorKpiRequest result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.monitoringWindowS_ = monitoringWindowS_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.samplingRateS_ = samplingRateS_;
+                }
             }
 
             @java.lang.Override
@@ -2934,7 +2786,7 @@ public final class Monitoring {
                 if (other.getSamplingRateS() != 0F) {
                     setSamplingRateS(other.getSamplingRateS());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2946,20 +2798,61 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 21:
+                                {
+                                    monitoringWindowS_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            case 29:
+                                {
+                                    samplingRateS_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.KpiId kpiId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
@@ -2969,7 +2862,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -2993,10 +2886,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3006,10 +2900,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3018,15 +2913,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3034,13 +2930,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -3048,6 +2944,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -3092,6 +2989,7 @@ public final class Monitoring {
              */
             public Builder setMonitoringWindowS(float value) {
                 monitoringWindowS_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -3101,6 +2999,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearMonitoringWindowS() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 monitoringWindowS_ = 0F;
                 onChanged();
                 return this;
@@ -3132,6 +3031,7 @@ public final class Monitoring {
              */
             public Builder setSamplingRateS(float value) {
                 samplingRateS_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -3145,6 +3045,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearSamplingRateS() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 samplingRateS_ = 0F;
                 onChanged();
                 return this;
@@ -3177,7 +3078,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public MonitorKpiRequest parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new MonitorKpiRequest(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -3322,93 +3233,6 @@ public final class Monitoring {
             return new KpiQuery();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiQuery(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)) {
-                                    kpiIds_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                kpiIds_.add(input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
-                                break;
-                            }
-                        case 21:
-                            {
-                                monitoringWindowS_ = input.readFloat();
-                                break;
-                            }
-                        case 24:
-                            {
-                                lastNSamples_ = input.readUInt32();
-                                break;
-                            }
-                        case 34:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (startTimestamp_ != null) {
-                                    subBuilder = startTimestamp_.toBuilder();
-                                }
-                                startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(startTimestamp_);
-                                    startTimestamp_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 42:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (endTimestamp_ != null) {
-                                    subBuilder = endTimestamp_.toBuilder();
-                                }
-                                endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(endTimestamp_);
-                                    endTimestamp_ = 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)) {
-                    kpiIds_ = java.util.Collections.unmodifiableList(kpiIds_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
         }
@@ -3420,6 +3244,7 @@ public final class Monitoring {
 
         public static final int KPI_IDS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.KpiId> kpiIds_;
 
         /**
@@ -3464,7 +3289,7 @@ public final class Monitoring {
 
         public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
 
-        private float monitoringWindowS_;
+        private float monitoringWindowS_ = 0F;
 
         /**
          * <code>float monitoring_window_s = 2;</code>
@@ -3477,7 +3302,7 @@ public final class Monitoring {
 
         public static final int LAST_N_SAMPLES_FIELD_NUMBER = 3;
 
-        private int lastNSamples_;
+        private int lastNSamples_ = 0;
 
         /**
          * <pre>
@@ -3531,7 +3356,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-            return getStartTimestamp();
+            return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
         }
 
         public static final int END_TIMESTAMP_FIELD_NUMBER = 5;
@@ -3573,7 +3398,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-            return getEndTimestamp();
+            return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -3594,7 +3419,7 @@ public final class Monitoring {
             for (int i = 0; i < kpiIds_.size(); i++) {
                 output.writeMessage(1, kpiIds_.get(i));
             }
-            if (monitoringWindowS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(monitoringWindowS_) != 0) {
                 output.writeFloat(2, monitoringWindowS_);
             }
             if (lastNSamples_ != 0) {
@@ -3606,7 +3431,7 @@ public final class Monitoring {
             if (endTimestamp_ != null) {
                 output.writeMessage(5, getEndTimestamp());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -3618,7 +3443,7 @@ public final class Monitoring {
             for (int i = 0; i < kpiIds_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, kpiIds_.get(i));
             }
-            if (monitoringWindowS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(monitoringWindowS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, monitoringWindowS_);
             }
             if (lastNSamples_ != 0) {
@@ -3630,7 +3455,7 @@ public final class Monitoring {
             if (endTimestamp_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getEndTimestamp());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -3662,7 +3487,7 @@ public final class Monitoring {
                 if (!getEndTimestamp().equals(other.getEndTimestamp()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -3690,7 +3515,7 @@ public final class Monitoring {
                 hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
                 hash = (53 * hash) + getEndTimestamp().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -3784,41 +3609,33 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getKpiIdsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (kpiIdsBuilder_ == null) {
                     kpiIds_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    kpiIds_ = null;
                     kpiIdsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 monitoringWindowS_ = 0F;
                 lastNSamples_ = 0;
-                if (startTimestampBuilder_ == null) {
-                    startTimestamp_ = null;
-                } else {
-                    startTimestamp_ = null;
+                startTimestamp_ = null;
+                if (startTimestampBuilder_ != null) {
+                    startTimestampBuilder_.dispose();
                     startTimestampBuilder_ = null;
                 }
-                if (endTimestampBuilder_ == null) {
-                    endTimestamp_ = null;
-                } else {
-                    endTimestamp_ = null;
+                endTimestamp_ = null;
+                if (endTimestampBuilder_ != null) {
+                    endTimestampBuilder_.dispose();
                     endTimestampBuilder_ = null;
                 }
                 return this;
@@ -3846,7 +3663,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiQuery buildPartial() {
                 monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.KpiQuery result) {
                 if (kpiIdsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         kpiIds_ = java.util.Collections.unmodifiableList(kpiIds_);
@@ -3856,50 +3681,22 @@ public final class Monitoring {
                 } else {
                     result.kpiIds_ = kpiIdsBuilder_.build();
                 }
-                result.monitoringWindowS_ = monitoringWindowS_;
-                result.lastNSamples_ = lastNSamples_;
-                if (startTimestampBuilder_ == null) {
-                    result.startTimestamp_ = startTimestamp_;
-                } else {
-                    result.startTimestamp_ = startTimestampBuilder_.build();
-                }
-                if (endTimestampBuilder_ == null) {
-                    result.endTimestamp_ = endTimestamp_;
-                } else {
-                    result.endTimestamp_ = endTimestampBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.KpiQuery result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.monitoringWindowS_ = monitoringWindowS_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.lastNSamples_ = lastNSamples_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.startTimestamp_ = startTimestampBuilder_ == null ? startTimestamp_ : startTimestampBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.endTimestamp_ = endTimestampBuilder_ == null ? endTimestamp_ : endTimestampBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -3951,7 +3748,7 @@ public final class Monitoring {
                 if (other.hasEndTimestamp()) {
                     mergeEndTimestamp(other.getEndTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -3963,17 +3760,75 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiQuery parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.KpiId m = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+                                    if (kpiIdsBuilder_ == null) {
+                                        ensureKpiIdsIsMutable();
+                                        kpiIds_.add(m);
+                                    } else {
+                                        kpiIdsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            case 21:
+                                {
+                                    monitoringWindowS_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            case 24:
+                                {
+                                    lastNSamples_ = input.readUInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 34:
+                                {
+                                    input.readMessage(getStartTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getEndTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -4234,6 +4089,7 @@ public final class Monitoring {
              */
             public Builder setMonitoringWindowS(float value) {
                 monitoringWindowS_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -4243,6 +4099,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearMonitoringWindowS() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 monitoringWindowS_ = 0F;
                 onChanged();
                 return this;
@@ -4274,6 +4131,7 @@ public final class Monitoring {
              */
             public Builder setLastNSamples(int value) {
                 lastNSamples_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -4287,6 +4145,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearLastNSamples() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 lastNSamples_ = 0;
                 onChanged();
                 return this;
@@ -4305,7 +4164,7 @@ public final class Monitoring {
              * @return Whether the startTimestamp field is set.
              */
             public boolean hasStartTimestamp() {
-                return startTimestampBuilder_ != null || startTimestamp_ != null;
+                return ((bitField0_ & 0x00000008) != 0);
             }
 
             /**
@@ -4337,10 +4196,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     startTimestamp_ = value;
-                    onChanged();
                 } else {
                     startTimestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -4354,10 +4214,11 @@ public final class Monitoring {
             public Builder setStartTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (startTimestampBuilder_ == null) {
                     startTimestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     startTimestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -4370,15 +4231,16 @@ public final class Monitoring {
              */
             public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (startTimestampBuilder_ == null) {
-                    if (startTimestamp_ != null) {
-                        startTimestamp_ = context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000008) != 0) && startTimestamp_ != null && startTimestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getStartTimestampBuilder().mergeFrom(value);
                     } else {
                         startTimestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     startTimestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -4390,13 +4252,13 @@ public final class Monitoring {
              * <code>.context.Timestamp start_timestamp = 4;</code>
              */
             public Builder clearStartTimestamp() {
-                if (startTimestampBuilder_ == null) {
-                    startTimestamp_ = null;
-                    onChanged();
-                } else {
-                    startTimestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                startTimestamp_ = null;
+                if (startTimestampBuilder_ != null) {
+                    startTimestampBuilder_.dispose();
                     startTimestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -4408,6 +4270,7 @@ public final class Monitoring {
              * <code>.context.Timestamp start_timestamp = 4;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return getStartTimestampFieldBuilder().getBuilder();
             }
@@ -4455,7 +4318,7 @@ public final class Monitoring {
              * @return Whether the endTimestamp field is set.
              */
             public boolean hasEndTimestamp() {
-                return endTimestampBuilder_ != null || endTimestamp_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -4487,10 +4350,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     endTimestamp_ = value;
-                    onChanged();
                 } else {
                     endTimestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -4504,10 +4368,11 @@ public final class Monitoring {
             public Builder setEndTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (endTimestampBuilder_ == null) {
                     endTimestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endTimestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -4520,15 +4385,16 @@ public final class Monitoring {
              */
             public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (endTimestampBuilder_ == null) {
-                    if (endTimestamp_ != null) {
-                        endTimestamp_ = context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && endTimestamp_ != null && endTimestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getEndTimestampBuilder().mergeFrom(value);
                     } else {
                         endTimestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     endTimestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -4540,13 +4406,13 @@ public final class Monitoring {
              * <code>.context.Timestamp end_timestamp = 5;</code>
              */
             public Builder clearEndTimestamp() {
-                if (endTimestampBuilder_ == null) {
-                    endTimestamp_ = null;
-                    onChanged();
-                } else {
-                    endTimestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                endTimestamp_ = null;
+                if (endTimestampBuilder_ != null) {
+                    endTimestampBuilder_.dispose();
                     endTimestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -4558,6 +4424,7 @@ public final class Monitoring {
              * <code>.context.Timestamp end_timestamp = 5;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getEndTimestampFieldBuilder().getBuilder();
             }
@@ -4619,7 +4486,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiQuery parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiQuery(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -4702,70 +4579,6 @@ public final class Monitoring {
             return new RawKpi();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private RawKpi(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.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-                                if (kpiValue_ != null) {
-                                    subBuilder = kpiValue_.toBuilder();
-                                }
-                                kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiValue_);
-                                    kpiValue_ = 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 monitoring.Monitoring.internal_static_monitoring_RawKpi_descriptor;
         }
@@ -4802,7 +4615,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         public static final int KPI_VALUE_FIELD_NUMBER = 2;
@@ -4832,7 +4645,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-            return getKpiValue();
+            return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -4856,7 +4669,7 @@ public final class Monitoring {
             if (kpiValue_ != null) {
                 output.writeMessage(2, getKpiValue());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -4871,7 +4684,7 @@ public final class Monitoring {
             if (kpiValue_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKpiValue());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -4897,7 +4710,7 @@ public final class Monitoring {
                 if (!getKpiValue().equals(other.getKpiValue()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -4917,7 +4730,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiValue().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -5015,32 +4828,24 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.RawKpi.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 (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                bitField0_ = 0;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
-                if (kpiValueBuilder_ == null) {
-                    kpiValue_ = null;
-                } else {
-                    kpiValue_ = null;
+                kpiValue_ = null;
+                if (kpiValueBuilder_ != null) {
+                    kpiValueBuilder_.dispose();
                     kpiValueBuilder_ = null;
                 }
                 return this;
@@ -5068,48 +4873,21 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.RawKpi buildPartial() {
                 monitoring.Monitoring.RawKpi result = new monitoring.Monitoring.RawKpi(this);
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
-                }
-                if (kpiValueBuilder_ == null) {
-                    result.kpiValue_ = kpiValue_;
-                } else {
-                    result.kpiValue_ = kpiValueBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.RawKpi result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiValue_ = kpiValueBuilder_ == null ? kpiValue_ : kpiValueBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -5131,7 +4909,7 @@ public final class Monitoring {
                 if (other.hasKpiValue()) {
                     mergeKpiValue(other.getKpiValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -5143,20 +4921,54 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.RawKpi parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.RawKpi) e.getUnfinishedMessage();
-                    throw e.unwrapIOException();
-                } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getKpiValueFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
                     }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Timestamp timestamp_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
@@ -5166,7 +4978,7 @@ public final class Monitoring {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -5190,10 +5002,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5203,10 +5016,11 @@ public final class Monitoring {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5215,15 +5029,16 @@ public final class Monitoring {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -5231,13 +5046,13 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 1;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -5245,6 +5060,7 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 1;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -5280,7 +5096,7 @@ public final class Monitoring {
              * @return Whether the kpiValue field is set.
              */
             public boolean hasKpiValue() {
-                return kpiValueBuilder_ != null || kpiValue_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -5304,10 +5120,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiValue_ = value;
-                    onChanged();
                 } else {
                     kpiValueBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -5317,10 +5134,11 @@ public final class Monitoring {
             public Builder setKpiValue(monitoring.Monitoring.KpiValue.Builder builderForValue) {
                 if (kpiValueBuilder_ == null) {
                     kpiValue_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiValueBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -5329,15 +5147,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
                 if (kpiValueBuilder_ == null) {
-                    if (kpiValue_ != null) {
-                        kpiValue_ = monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && kpiValue_ != null && kpiValue_ != monitoring.Monitoring.KpiValue.getDefaultInstance()) {
+                        getKpiValueBuilder().mergeFrom(value);
                     } else {
                         kpiValue_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiValueBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -5345,13 +5164,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpi_value = 2;</code>
              */
             public Builder clearKpiValue() {
-                if (kpiValueBuilder_ == null) {
-                    kpiValue_ = null;
-                    onChanged();
-                } else {
-                    kpiValue_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                kpiValue_ = null;
+                if (kpiValueBuilder_ != null) {
+                    kpiValueBuilder_.dispose();
                     kpiValueBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -5359,6 +5178,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpi_value = 2;</code>
              */
             public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getKpiValueFieldBuilder().getBuilder();
             }
@@ -5412,7 +5232,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public RawKpi parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new RawKpi(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -5504,70 +5334,6 @@ public final class Monitoring {
             return new RawKpiList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private RawKpiList(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:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    rawKpis_ = new java.util.ArrayList<monitoring.Monitoring.RawKpi>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                rawKpis_.add(input.readMessage(monitoring.Monitoring.RawKpi.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)) {
-                    rawKpis_ = java.util.Collections.unmodifiableList(rawKpis_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_RawKpiList_descriptor;
         }
@@ -5604,11 +5370,12 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int RAW_KPIS_FIELD_NUMBER = 2;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.RawKpi> rawKpis_;
 
         /**
@@ -5672,7 +5439,7 @@ public final class Monitoring {
             for (int i = 0; i < rawKpis_.size(); i++) {
                 output.writeMessage(2, rawKpis_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -5687,7 +5454,7 @@ public final class Monitoring {
             for (int i = 0; i < rawKpis_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, rawKpis_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -5709,7 +5476,7 @@ public final class Monitoring {
             }
             if (!getRawKpisList().equals(other.getRawKpisList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -5729,7 +5496,7 @@ public final class Monitoring {
                 hash = (37 * hash) + RAW_KPIS_FIELD_NUMBER;
                 hash = (53 * hash) + getRawKpisList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -5827,35 +5594,28 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.RawKpiList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getRawKpisFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
                 if (rawKpisBuilder_ == null) {
                     rawKpis_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    rawKpis_ = null;
                     rawKpisBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000002);
                 return this;
             }
 
@@ -5881,53 +5641,31 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.RawKpiList buildPartial() {
                 monitoring.Monitoring.RawKpiList result = new monitoring.Monitoring.RawKpiList(this);
-                int from_bitField0_ = bitField0_;
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.RawKpiList result) {
                 if (rawKpisBuilder_ == null) {
-                    if (((bitField0_ & 0x00000001) != 0)) {
+                    if (((bitField0_ & 0x00000002) != 0)) {
                         rawKpis_ = java.util.Collections.unmodifiableList(rawKpis_);
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ = (bitField0_ & ~0x00000002);
                     }
                     result.rawKpis_ = rawKpis_;
                 } else {
                     result.rawKpis_ = rawKpisBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.RawKpiList result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -5950,7 +5688,7 @@ public final class Monitoring {
                     if (!other.rawKpis_.isEmpty()) {
                         if (rawKpis_.isEmpty()) {
                             rawKpis_ = other.rawKpis_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000002);
                         } else {
                             ensureRawKpisIsMutable();
                             rawKpis_.addAll(other.rawKpis_);
@@ -5963,14 +5701,14 @@ public final class Monitoring {
                             rawKpisBuilder_.dispose();
                             rawKpisBuilder_ = null;
                             rawKpis_ = other.rawKpis_;
-                            bitField0_ = (bitField0_ & ~0x00000001);
+                            bitField0_ = (bitField0_ & ~0x00000002);
                             rawKpisBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getRawKpisFieldBuilder() : null;
                         } else {
                             rawKpisBuilder_.addAllMessages(other.rawKpis_);
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -5982,17 +5720,54 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.RawKpiList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    monitoring.Monitoring.RawKpi m = input.readMessage(monitoring.Monitoring.RawKpi.parser(), extensionRegistry);
+                                    if (rawKpisBuilder_ == null) {
+                                        ensureRawKpisIsMutable();
+                                        rawKpis_.add(m);
+                                    } else {
+                                        rawKpisBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.RawKpiList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -6007,7 +5782,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -6031,10 +5806,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -6044,10 +5820,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -6056,15 +5833,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -6072,13 +5850,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -6086,6 +5864,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -6115,9 +5894,9 @@ public final class Monitoring {
             private java.util.List<monitoring.Monitoring.RawKpi> rawKpis_ = java.util.Collections.emptyList();
 
             private void ensureRawKpisIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!((bitField0_ & 0x00000002) != 0)) {
                     rawKpis_ = new java.util.ArrayList<monitoring.Monitoring.RawKpi>(rawKpis_);
-                    bitField0_ |= 0x00000001;
+                    bitField0_ |= 0x00000002;
                 }
             }
 
@@ -6269,7 +6048,7 @@ public final class Monitoring {
             public Builder clearRawKpis() {
                 if (rawKpisBuilder_ == null) {
                     rawKpis_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                    bitField0_ = (bitField0_ & ~0x00000002);
                     onChanged();
                 } else {
                     rawKpisBuilder_.clear();
@@ -6343,7 +6122,7 @@ public final class Monitoring {
 
             private com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder> getRawKpisFieldBuilder() {
                 if (rawKpisBuilder_ == null) {
-                    rawKpisBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder>(rawKpis_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    rawKpisBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder>(rawKpis_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
                     rawKpis_ = null;
                 }
                 return rawKpisBuilder_;
@@ -6376,7 +6155,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public RawKpiList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new RawKpiList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -6451,57 +6240,6 @@ public final class Monitoring {
             return new RawKpiTable();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private RawKpiTable(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)) {
-                                    rawKpiLists_ = new java.util.ArrayList<monitoring.Monitoring.RawKpiList>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                rawKpiLists_.add(input.readMessage(monitoring.Monitoring.RawKpiList.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)) {
-                    rawKpiLists_ = java.util.Collections.unmodifiableList(rawKpiLists_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_descriptor;
         }
@@ -6513,6 +6251,7 @@ public final class Monitoring {
 
         public static final int RAW_KPI_LISTS_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.RawKpiList> rawKpiLists_;
 
         /**
@@ -6573,7 +6312,7 @@ public final class Monitoring {
             for (int i = 0; i < rawKpiLists_.size(); i++) {
                 output.writeMessage(1, rawKpiLists_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -6585,7 +6324,7 @@ public final class Monitoring {
             for (int i = 0; i < rawKpiLists_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, rawKpiLists_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -6601,7 +6340,7 @@ public final class Monitoring {
             monitoring.Monitoring.RawKpiTable other = (monitoring.Monitoring.RawKpiTable) obj;
             if (!getRawKpiListsList().equals(other.getRawKpiListsList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -6617,7 +6356,7 @@ public final class Monitoring {
                 hash = (37 * hash) + RAW_KPI_LISTS_FIELD_NUMBER;
                 hash = (53 * hash) + getRawKpiListsList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -6715,29 +6454,23 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.RawKpiTable.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getRawKpiListsFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (rawKpiListsBuilder_ == null) {
                     rawKpiLists_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    rawKpiLists_ = null;
                     rawKpiListsBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -6763,7 +6496,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.RawKpiTable buildPartial() {
                 monitoring.Monitoring.RawKpiTable result = new monitoring.Monitoring.RawKpiTable(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.RawKpiTable result) {
                 if (rawKpiListsBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         rawKpiLists_ = java.util.Collections.unmodifiableList(rawKpiLists_);
@@ -6773,38 +6514,10 @@ public final class Monitoring {
                 } else {
                     result.rawKpiLists_ = rawKpiListsBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.RawKpiTable result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -6844,7 +6557,7 @@ public final class Monitoring {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -6856,17 +6569,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.RawKpiTable parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.RawKpiList m = input.readMessage(monitoring.Monitoring.RawKpiList.parser(), extensionRegistry);
+                                    if (rawKpiListsBuilder_ == null) {
+                                        ensureRawKpiListsIsMutable();
+                                        rawKpiLists_.add(m);
+                                    } else {
+                                        rawKpiListsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.RawKpiTable) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -7136,7 +6879,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public RawKpiTable parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new RawKpiTable(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -7198,57 +6951,6 @@ public final class Monitoring {
             return new KpiId();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiId(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 (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = 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 monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
         }
@@ -7285,7 +6987,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -7306,7 +7008,7 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 output.writeMessage(1, getKpiId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -7318,7 +7020,7 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getKpiId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -7338,7 +7040,7 @@ public final class Monitoring {
                 if (!getKpiId().equals(other.getKpiId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -7354,7 +7056,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -7448,26 +7150,19 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiId.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 (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
                 return this;
@@ -7495,43 +7190,18 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiId buildPartial() {
                 monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.KpiId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -7550,7 +7220,7 @@ public final class Monitoring {
                 if (other.hasKpiId()) {
                     mergeKpiId(other.getKpiId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -7562,20 +7232,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiId parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid kpiId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
@@ -7585,7 +7282,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -7609,10 +7306,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -7622,10 +7320,11 @@ public final class Monitoring {
             public Builder setKpiId(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -7634,15 +7333,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -7650,13 +7350,13 @@ public final class Monitoring {
              * <code>.context.Uuid kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -7664,6 +7364,7 @@ public final class Monitoring {
              * <code>.context.Uuid kpi_id = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -7717,7 +7418,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiId(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -7813,83 +7524,6 @@ public final class Monitoring {
             return new Kpi();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private Kpi(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:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 26:
-                            {
-                                monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-                                if (kpiValue_ != null) {
-                                    subBuilder = kpiValue_.toBuilder();
-                                }
-                                kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiValue_);
-                                    kpiValue_ = 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 monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
         }
@@ -7926,7 +7560,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int TIMESTAMP_FIELD_NUMBER = 2;
@@ -7956,7 +7590,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         public static final int KPI_VALUE_FIELD_NUMBER = 3;
@@ -7986,7 +7620,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-            return getKpiValue();
+            return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -8013,7 +7647,7 @@ public final class Monitoring {
             if (kpiValue_ != null) {
                 output.writeMessage(3, getKpiValue());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -8031,7 +7665,7 @@ public final class Monitoring {
             if (kpiValue_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getKpiValue());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -8063,7 +7697,7 @@ public final class Monitoring {
                 if (!getKpiValue().equals(other.getKpiValue()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -8087,7 +7721,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiValue().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -8181,38 +7815,29 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.Kpi.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 (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                bitField0_ = 0;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
-                if (kpiValueBuilder_ == null) {
-                    kpiValue_ = null;
-                } else {
-                    kpiValue_ = null;
+                kpiValue_ = null;
+                if (kpiValueBuilder_ != null) {
+                    kpiValueBuilder_.dispose();
                     kpiValueBuilder_ = null;
                 }
                 return this;
@@ -8240,53 +7865,24 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.Kpi buildPartial() {
                 monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
-                }
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
-                }
-                if (kpiValueBuilder_ == null) {
-                    result.kpiValue_ = kpiValue_;
-                } else {
-                    result.kpiValue_ = kpiValueBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.Kpi result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.kpiValue_ = kpiValueBuilder_ == null ? kpiValue_ : kpiValueBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -8311,7 +7907,7 @@ public final class Monitoring {
                 if (other.hasKpiValue()) {
                     mergeKpiValue(other.getKpiValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -8323,20 +7919,61 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.Kpi parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getKpiValueFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.KpiId kpiId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
@@ -8346,7 +7983,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -8370,10 +8007,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8383,10 +8021,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8395,15 +8034,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -8411,13 +8051,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8425,6 +8065,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 1;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -8460,7 +8101,7 @@ public final class Monitoring {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -8484,10 +8125,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8497,10 +8139,11 @@ public final class Monitoring {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8509,15 +8152,16 @@ public final class Monitoring {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -8525,13 +8169,13 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 2;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8539,6 +8183,7 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 2;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -8574,7 +8219,7 @@ public final class Monitoring {
              * @return Whether the kpiValue field is set.
              */
             public boolean hasKpiValue() {
-                return kpiValueBuilder_ != null || kpiValue_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -8598,10 +8243,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiValue_ = value;
-                    onChanged();
                 } else {
                     kpiValueBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -8611,10 +8257,11 @@ public final class Monitoring {
             public Builder setKpiValue(monitoring.Monitoring.KpiValue.Builder builderForValue) {
                 if (kpiValueBuilder_ == null) {
                     kpiValue_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiValueBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -8623,15 +8270,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
                 if (kpiValueBuilder_ == null) {
-                    if (kpiValue_ != null) {
-                        kpiValue_ = monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && kpiValue_ != null && kpiValue_ != monitoring.Monitoring.KpiValue.getDefaultInstance()) {
+                        getKpiValueBuilder().mergeFrom(value);
                     } else {
                         kpiValue_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiValueBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -8639,13 +8287,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpi_value = 3;</code>
              */
             public Builder clearKpiValue() {
-                if (kpiValueBuilder_ == null) {
-                    kpiValue_ = null;
-                    onChanged();
-                } else {
-                    kpiValue_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                kpiValue_ = null;
+                if (kpiValueBuilder_ != null) {
+                    kpiValueBuilder_.dispose();
                     kpiValueBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -8653,6 +8301,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpi_value = 3;</code>
              */
             public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getKpiValueFieldBuilder().getBuilder();
             }
@@ -8706,7 +8355,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public Kpi parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new Kpi(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -8815,85 +8474,6 @@ public final class Monitoring {
             return new KpiValueRange();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiValueRange(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:
-                            {
-                                monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-                                if (kpiMinValue_ != null) {
-                                    subBuilder = kpiMinValue_.toBuilder();
-                                }
-                                kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiMinValue_);
-                                    kpiMinValue_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-                                if (kpiMaxValue_ != null) {
-                                    subBuilder = kpiMaxValue_.toBuilder();
-                                }
-                                kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiMaxValue_);
-                                    kpiMaxValue_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 24:
-                            {
-                                inRange_ = input.readBool();
-                                break;
-                            }
-                        case 32:
-                            {
-                                includeMinValue_ = input.readBool();
-                                break;
-                            }
-                        case 40:
-                            {
-                                includeMaxValue_ = 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 monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
         }
@@ -8930,7 +8510,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
-            return getKpiMinValue();
+            return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
         }
 
         public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
@@ -8960,12 +8540,12 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
-            return getKpiMaxValue();
+            return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
         }
 
         public static final int INRANGE_FIELD_NUMBER = 3;
 
-        private boolean inRange_;
+        private boolean inRange_ = false;
 
         /**
          * <pre>
@@ -8982,7 +8562,7 @@ public final class Monitoring {
 
         public static final int INCLUDEMINVALUE_FIELD_NUMBER = 4;
 
-        private boolean includeMinValue_;
+        private boolean includeMinValue_ = false;
 
         /**
          * <pre>
@@ -8999,7 +8579,7 @@ public final class Monitoring {
 
         public static final int INCLUDEMAXVALUE_FIELD_NUMBER = 5;
 
-        private boolean includeMaxValue_;
+        private boolean includeMaxValue_ = false;
 
         /**
          * <pre>
@@ -9044,7 +8624,7 @@ public final class Monitoring {
             if (includeMaxValue_ != false) {
                 output.writeBool(5, includeMaxValue_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -9068,7 +8648,7 @@ public final class Monitoring {
             if (includeMaxValue_ != false) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, includeMaxValue_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -9100,7 +8680,7 @@ public final class Monitoring {
                 return false;
             if (getIncludeMaxValue() != other.getIncludeMaxValue())
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -9126,7 +8706,7 @@ public final class Monitoring {
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeMinValue());
             hash = (37 * hash) + INCLUDEMAXVALUE_FIELD_NUMBER;
             hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIncludeMaxValue());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -9220,32 +8800,24 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiValueRange.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 (kpiMinValueBuilder_ == null) {
-                    kpiMinValue_ = null;
-                } else {
-                    kpiMinValue_ = null;
+                bitField0_ = 0;
+                kpiMinValue_ = null;
+                if (kpiMinValueBuilder_ != null) {
+                    kpiMinValueBuilder_.dispose();
                     kpiMinValueBuilder_ = null;
                 }
-                if (kpiMaxValueBuilder_ == null) {
-                    kpiMaxValue_ = null;
-                } else {
-                    kpiMaxValue_ = null;
+                kpiMaxValue_ = null;
+                if (kpiMaxValueBuilder_ != null) {
+                    kpiMaxValueBuilder_.dispose();
                     kpiMaxValueBuilder_ = null;
                 }
                 inRange_ = false;
@@ -9276,51 +8848,30 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiValueRange buildPartial() {
                 monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
-                if (kpiMinValueBuilder_ == null) {
-                    result.kpiMinValue_ = kpiMinValue_;
-                } else {
-                    result.kpiMinValue_ = kpiMinValueBuilder_.build();
-                }
-                if (kpiMaxValueBuilder_ == null) {
-                    result.kpiMaxValue_ = kpiMaxValue_;
-                } else {
-                    result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.inRange_ = inRange_;
-                result.includeMinValue_ = includeMinValue_;
-                result.includeMaxValue_ = includeMaxValue_;
                 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);
+            private void buildPartial0(monitoring.Monitoring.KpiValueRange result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.kpiMinValue_ = kpiMinValueBuilder_ == null ? kpiMinValue_ : kpiMinValueBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiMaxValue_ = kpiMaxValueBuilder_ == null ? kpiMaxValue_ : kpiMaxValueBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.inRange_ = inRange_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.includeMinValue_ = includeMinValue_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.includeMaxValue_ = includeMaxValue_;
+                }
             }
 
             @java.lang.Override
@@ -9351,7 +8902,7 @@ public final class Monitoring {
                 if (other.getIncludeMaxValue() != false) {
                     setIncludeMaxValue(other.getIncludeMaxValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -9363,20 +8914,75 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiValueRange parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getKpiMinValueFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getKpiMaxValueFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    inRange_ = input.readBool();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    includeMinValue_ = input.readBool();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 40:
+                                {
+                                    includeMaxValue_ = input.readBool();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 40
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.KpiValue kpiMinValue_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
@@ -9386,7 +8992,7 @@ public final class Monitoring {
              * @return Whether the kpiMinValue field is set.
              */
             public boolean hasKpiMinValue() {
-                return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -9410,10 +9016,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiMinValue_ = value;
-                    onChanged();
                 } else {
                     kpiMinValueBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9423,10 +9030,11 @@ public final class Monitoring {
             public Builder setKpiMinValue(monitoring.Monitoring.KpiValue.Builder builderForValue) {
                 if (kpiMinValueBuilder_ == null) {
                     kpiMinValue_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiMinValueBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9435,15 +9043,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
                 if (kpiMinValueBuilder_ == null) {
-                    if (kpiMinValue_ != null) {
-                        kpiMinValue_ = monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && kpiMinValue_ != null && kpiMinValue_ != monitoring.Monitoring.KpiValue.getDefaultInstance()) {
+                        getKpiMinValueBuilder().mergeFrom(value);
                     } else {
                         kpiMinValue_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiMinValueBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -9451,13 +9060,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
              */
             public Builder clearKpiMinValue() {
-                if (kpiMinValueBuilder_ == null) {
-                    kpiMinValue_ = null;
-                    onChanged();
-                } else {
-                    kpiMinValue_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                kpiMinValue_ = null;
+                if (kpiMinValueBuilder_ != null) {
+                    kpiMinValueBuilder_.dispose();
                     kpiMinValueBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -9465,6 +9074,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
              */
             public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getKpiMinValueFieldBuilder().getBuilder();
             }
@@ -9500,7 +9110,7 @@ public final class Monitoring {
              * @return Whether the kpiMaxValue field is set.
              */
             public boolean hasKpiMaxValue() {
-                return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -9524,10 +9134,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiMaxValue_ = value;
-                    onChanged();
                 } else {
                     kpiMaxValueBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -9537,10 +9148,11 @@ public final class Monitoring {
             public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue.Builder builderForValue) {
                 if (kpiMaxValueBuilder_ == null) {
                     kpiMaxValue_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiMaxValueBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -9549,15 +9161,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
                 if (kpiMaxValueBuilder_ == null) {
-                    if (kpiMaxValue_ != null) {
-                        kpiMaxValue_ = monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && kpiMaxValue_ != null && kpiMaxValue_ != monitoring.Monitoring.KpiValue.getDefaultInstance()) {
+                        getKpiMaxValueBuilder().mergeFrom(value);
                     } else {
                         kpiMaxValue_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiMaxValueBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -9565,13 +9178,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
              */
             public Builder clearKpiMaxValue() {
-                if (kpiMaxValueBuilder_ == null) {
-                    kpiMaxValue_ = null;
-                    onChanged();
-                } else {
-                    kpiMaxValue_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                kpiMaxValue_ = null;
+                if (kpiMaxValueBuilder_ != null) {
+                    kpiMaxValueBuilder_.dispose();
                     kpiMaxValueBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -9579,6 +9192,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
              */
             public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getKpiMaxValueFieldBuilder().getBuilder();
             }
@@ -9631,6 +9245,7 @@ public final class Monitoring {
              */
             public Builder setInRange(boolean value) {
                 inRange_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -9644,6 +9259,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearInRange() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 inRange_ = false;
                 onChanged();
                 return this;
@@ -9675,6 +9291,7 @@ public final class Monitoring {
              */
             public Builder setIncludeMinValue(boolean value) {
                 includeMinValue_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -9688,6 +9305,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearIncludeMinValue() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 includeMinValue_ = false;
                 onChanged();
                 return this;
@@ -9719,6 +9337,7 @@ public final class Monitoring {
              */
             public Builder setIncludeMaxValue(boolean value) {
                 includeMaxValue_ = value;
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return this;
             }
@@ -9732,6 +9351,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearIncludeMaxValue() {
+                bitField0_ = (bitField0_ & ~0x00000010);
                 includeMaxValue_ = false;
                 onChanged();
                 return this;
@@ -9764,7 +9384,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiValueRange parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiValueRange(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -9876,7 +9506,7 @@ public final class Monitoring {
          */
         boolean getBoolVal();
 
-        public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+        monitoring.Monitoring.KpiValue.ValueCase getValueCase();
     }
 
     /**
@@ -9901,87 +9531,6 @@ public final class Monitoring {
             return new KpiValue();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiValue(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:
-                            {
-                                valueCase_ = 1;
-                                value_ = input.readInt32();
-                                break;
-                            }
-                        case 16:
-                            {
-                                valueCase_ = 2;
-                                value_ = input.readUInt32();
-                                break;
-                            }
-                        case 24:
-                            {
-                                valueCase_ = 3;
-                                value_ = input.readInt64();
-                                break;
-                            }
-                        case 32:
-                            {
-                                valueCase_ = 4;
-                                value_ = input.readUInt64();
-                                break;
-                            }
-                        case 45:
-                            {
-                                valueCase_ = 5;
-                                value_ = input.readFloat();
-                                break;
-                            }
-                        case 50:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                valueCase_ = 6;
-                                value_ = s;
-                                break;
-                            }
-                        case 56:
-                            {
-                                valueCase_ = 7;
-                                value_ = 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 monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
         }
@@ -9993,6 +9542,7 @@ public final class Monitoring {
 
         private int valueCase_ = 0;
 
+        @SuppressWarnings("serial")
         private java.lang.Object value_;
 
         public enum ValueCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
@@ -10279,7 +9829,7 @@ public final class Monitoring {
             if (valueCase_ == 7) {
                 output.writeBool(7, (boolean) ((java.lang.Boolean) value_));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -10309,7 +9859,7 @@ public final class Monitoring {
             if (valueCase_ == 7) {
                 size += com.google.protobuf.CodedOutputStream.computeBoolSize(7, (boolean) ((java.lang.Boolean) value_));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -10357,7 +9907,7 @@ public final class Monitoring {
                 case 0:
                 default:
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -10401,7 +9951,7 @@ public final class Monitoring {
                 case 0:
                 default:
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -10495,22 +10045,16 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiValue.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();
+                bitField0_ = 0;
                 valueCase_ = 0;
                 value_ = null;
                 return this;
@@ -10538,60 +10082,21 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiValue buildPartial() {
                 monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
-                if (valueCase_ == 1) {
-                    result.value_ = value_;
-                }
-                if (valueCase_ == 2) {
-                    result.value_ = value_;
-                }
-                if (valueCase_ == 3) {
-                    result.value_ = value_;
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                if (valueCase_ == 4) {
-                    result.value_ = value_;
-                }
-                if (valueCase_ == 5) {
-                    result.value_ = value_;
-                }
-                if (valueCase_ == 6) {
-                    result.value_ = value_;
-                }
-                if (valueCase_ == 7) {
-                    result.value_ = value_;
-                }
-                result.valueCase_ = valueCase_;
+                buildPartialOneofs(result);
                 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);
+            private void buildPartial0(monitoring.Monitoring.KpiValue result) {
+                int from_bitField0_ = bitField0_;
             }
 
-            @java.lang.Override
-            public Builder addRepeatedField(com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
-                return super.addRepeatedField(field, value);
+            private void buildPartialOneofs(monitoring.Monitoring.KpiValue result) {
+                result.valueCase_ = valueCase_;
+                result.value_ = this.value_;
             }
 
             @java.lang.Override
@@ -10650,7 +10155,7 @@ public final class Monitoring {
                             break;
                         }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -10662,17 +10167,85 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiValue parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    value_ = input.readInt32();
+                                    valueCase_ = 1;
+                                    break;
+                                }
+                            // case 8
+                            case 16:
+                                {
+                                    value_ = input.readUInt32();
+                                    valueCase_ = 2;
+                                    break;
+                                }
+                            // case 16
+                            case 24:
+                                {
+                                    value_ = input.readInt64();
+                                    valueCase_ = 3;
+                                    break;
+                                }
+                            // case 24
+                            case 32:
+                                {
+                                    value_ = input.readUInt64();
+                                    valueCase_ = 4;
+                                    break;
+                                }
+                            // case 32
+                            case 45:
+                                {
+                                    value_ = input.readFloat();
+                                    valueCase_ = 5;
+                                    break;
+                                }
+                            // case 45
+                            case 50:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    valueCase_ = 6;
+                                    value_ = s;
+                                    break;
+                                }
+                            // case 50
+                            case 56:
+                                {
+                                    value_ = input.readBool();
+                                    valueCase_ = 7;
+                                    break;
+                                }
+                            // case 56
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -10691,6 +10264,8 @@ public final class Monitoring {
                 return this;
             }
 
+            private int bitField0_;
+
             /**
              * <code>int32 int32Val = 1;</code>
              * @return Whether the int32Val field is set.
@@ -11078,7 +10653,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiValue parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiValue(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -11149,57 +10734,6 @@ public final class Monitoring {
             return new KpiList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiList(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)) {
-                                    kpi_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                kpi_.add(input.readMessage(monitoring.Monitoring.Kpi.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)) {
-                    kpi_ = java.util.Collections.unmodifiableList(kpi_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
         }
@@ -11211,6 +10745,7 @@ public final class Monitoring {
 
         public static final int KPI_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.Kpi> kpi_;
 
         /**
@@ -11271,7 +10806,7 @@ public final class Monitoring {
             for (int i = 0; i < kpi_.size(); i++) {
                 output.writeMessage(1, kpi_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -11283,7 +10818,7 @@ public final class Monitoring {
             for (int i = 0; i < kpi_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, kpi_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -11299,7 +10834,7 @@ public final class Monitoring {
             monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
             if (!getKpiList().equals(other.getKpiList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -11315,7 +10850,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -11409,29 +10944,23 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getKpiFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (kpiBuilder_ == null) {
                     kpi_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    kpi_ = null;
                     kpiBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -11457,7 +10986,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiList buildPartial() {
                 monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.KpiList result) {
                 if (kpiBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         kpi_ = java.util.Collections.unmodifiableList(kpi_);
@@ -11467,38 +11004,10 @@ public final class Monitoring {
                 } else {
                     result.kpi_ = kpiBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.KpiList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -11538,7 +11047,7 @@ public final class Monitoring {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -11550,17 +11059,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.Kpi m = input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry);
+                                    if (kpiBuilder_ == null) {
+                                        ensureKpiIsMutable();
+                                        kpi_.add(m);
+                                    } else {
+                                        kpiBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -11830,7 +11369,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -11901,57 +11450,6 @@ public final class Monitoring {
             return new KpiDescriptorList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private KpiDescriptorList(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)) {
-                                    kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                kpiDescriptorList_.add(input.readMessage(monitoring.Monitoring.KpiDescriptor.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)) {
-                    kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
         }
@@ -11963,6 +11461,7 @@ public final class Monitoring {
 
         public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
 
         /**
@@ -12023,7 +11522,7 @@ public final class Monitoring {
             for (int i = 0; i < kpiDescriptorList_.size(); i++) {
                 output.writeMessage(1, kpiDescriptorList_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -12035,7 +11534,7 @@ public final class Monitoring {
             for (int i = 0; i < kpiDescriptorList_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, kpiDescriptorList_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -12051,7 +11550,7 @@ public final class Monitoring {
             monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
             if (!getKpiDescriptorListList().equals(other.getKpiDescriptorListList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -12067,7 +11566,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiDescriptorListList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -12161,29 +11660,23 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getKpiDescriptorListFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (kpiDescriptorListBuilder_ == null) {
                     kpiDescriptorList_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    kpiDescriptorList_ = null;
                     kpiDescriptorListBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -12209,7 +11702,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.KpiDescriptorList buildPartial() {
                 monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.KpiDescriptorList result) {
                 if (kpiDescriptorListBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
@@ -12219,38 +11720,10 @@ public final class Monitoring {
                 } else {
                     result.kpiDescriptorList_ = kpiDescriptorListBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.KpiDescriptorList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -12290,7 +11763,7 @@ public final class Monitoring {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -12302,17 +11775,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.KpiDescriptor m = input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry);
+                                    if (kpiDescriptorListBuilder_ == null) {
+                                        ensureKpiDescriptorListIsMutable();
+                                        kpiDescriptorList_.add(m);
+                                    } else {
+                                        kpiDescriptorListBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -12582,7 +12085,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public KpiDescriptorList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new KpiDescriptorList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -12731,106 +12244,6 @@ public final class Monitoring {
             return new SubsDescriptor();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SubsDescriptor(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:
-                            {
-                                monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-                                if (subsId_ != null) {
-                                    subBuilder = subsId_.toBuilder();
-                                }
-                                subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(subsId_);
-                                    subsId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 29:
-                            {
-                                samplingDurationS_ = input.readFloat();
-                                break;
-                            }
-                        case 37:
-                            {
-                                samplingIntervalS_ = input.readFloat();
-                                break;
-                            }
-                        case 42:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (startTimestamp_ != null) {
-                                    subBuilder = startTimestamp_.toBuilder();
-                                }
-                                startTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(startTimestamp_);
-                                    startTimestamp_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 50:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (endTimestamp_ != null) {
-                                    subBuilder = endTimestamp_.toBuilder();
-                                }
-                                endTimestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(endTimestamp_);
-                                    endTimestamp_ = 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 monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
         }
@@ -12867,7 +12280,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-            return getSubsId();
+            return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
         }
 
         public static final int KPI_ID_FIELD_NUMBER = 2;
@@ -12897,12 +12310,12 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3;
 
-        private float samplingDurationS_;
+        private float samplingDurationS_ = 0F;
 
         /**
          * <code>float sampling_duration_s = 3;</code>
@@ -12915,7 +12328,7 @@ public final class Monitoring {
 
         public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4;
 
-        private float samplingIntervalS_;
+        private float samplingIntervalS_ = 0F;
 
         /**
          * <code>float sampling_interval_s = 4;</code>
@@ -12965,7 +12378,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-            return getStartTimestamp();
+            return startTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
         }
 
         public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
@@ -13007,7 +12420,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-            return getEndTimestamp();
+            return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -13031,10 +12444,10 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 output.writeMessage(2, getKpiId());
             }
-            if (samplingDurationS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingDurationS_) != 0) {
                 output.writeFloat(3, samplingDurationS_);
             }
-            if (samplingIntervalS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingIntervalS_) != 0) {
                 output.writeFloat(4, samplingIntervalS_);
             }
             if (startTimestamp_ != null) {
@@ -13043,7 +12456,7 @@ public final class Monitoring {
             if (endTimestamp_ != null) {
                 output.writeMessage(6, getEndTimestamp());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -13058,10 +12471,10 @@ public final class Monitoring {
             if (kpiId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKpiId());
             }
-            if (samplingDurationS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingDurationS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, samplingDurationS_);
             }
-            if (samplingIntervalS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(samplingIntervalS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(4, samplingIntervalS_);
             }
             if (startTimestamp_ != null) {
@@ -13070,7 +12483,7 @@ public final class Monitoring {
             if (endTimestamp_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getEndTimestamp());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -13112,7 +12525,7 @@ public final class Monitoring {
                 if (!getEndTimestamp().equals(other.getEndTimestamp()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -13144,7 +12557,7 @@ public final class Monitoring {
                 hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER;
                 hash = (53 * hash) + getEndTimestamp().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -13238,46 +12651,36 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.SubsDescriptor.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 (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                } else {
-                    subsId_ = null;
+                bitField0_ = 0;
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
                 samplingDurationS_ = 0F;
                 samplingIntervalS_ = 0F;
-                if (startTimestampBuilder_ == null) {
-                    startTimestamp_ = null;
-                } else {
-                    startTimestamp_ = null;
+                startTimestamp_ = null;
+                if (startTimestampBuilder_ != null) {
+                    startTimestampBuilder_.dispose();
                     startTimestampBuilder_ = null;
                 }
-                if (endTimestampBuilder_ == null) {
-                    endTimestamp_ = null;
-                } else {
-                    endTimestamp_ = null;
+                endTimestamp_ = null;
+                if (endTimestampBuilder_ != null) {
+                    endTimestampBuilder_.dispose();
                     endTimestampBuilder_ = null;
                 }
                 return this;
@@ -13305,60 +12708,33 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.SubsDescriptor buildPartial() {
                 monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
-                if (subsIdBuilder_ == null) {
-                    result.subsId_ = subsId_;
-                } else {
-                    result.subsId_ = subsIdBuilder_.build();
-                }
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
-                }
-                result.samplingDurationS_ = samplingDurationS_;
-                result.samplingIntervalS_ = samplingIntervalS_;
-                if (startTimestampBuilder_ == null) {
-                    result.startTimestamp_ = startTimestamp_;
-                } else {
-                    result.startTimestamp_ = startTimestampBuilder_.build();
-                }
-                if (endTimestampBuilder_ == null) {
-                    result.endTimestamp_ = endTimestamp_;
-                } else {
-                    result.endTimestamp_ = endTimestampBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.SubsDescriptor result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.subsId_ = subsIdBuilder_ == null ? subsId_ : subsIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.samplingDurationS_ = samplingDurationS_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.samplingIntervalS_ = samplingIntervalS_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.startTimestamp_ = startTimestampBuilder_ == null ? startTimestamp_ : startTimestampBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.endTimestamp_ = endTimestampBuilder_ == null ? endTimestamp_ : endTimestampBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -13392,7 +12768,7 @@ public final class Monitoring {
                 if (other.hasEndTimestamp()) {
                     mergeEndTimestamp(other.getEndTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -13404,20 +12780,82 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.SubsDescriptor parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getSubsIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 29:
+                                {
+                                    samplingDurationS_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            case 37:
+                                {
+                                    samplingIntervalS_ = input.readFloat();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 37
+                            case 42:
+                                {
+                                    input.readMessage(getStartTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getEndTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.SubscriptionID subsId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
@@ -13427,7 +12865,7 @@ public final class Monitoring {
              * @return Whether the subsId field is set.
              */
             public boolean hasSubsId() {
-                return subsIdBuilder_ != null || subsId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -13451,10 +12889,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     subsId_ = value;
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -13464,10 +12903,11 @@ public final class Monitoring {
             public Builder setSubsId(monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
                 if (subsIdBuilder_ == null) {
                     subsId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -13476,15 +12916,16 @@ public final class Monitoring {
              */
             public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
                 if (subsIdBuilder_ == null) {
-                    if (subsId_ != null) {
-                        subsId_ = monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && subsId_ != null && subsId_ != monitoring.Monitoring.SubscriptionID.getDefaultInstance()) {
+                        getSubsIdBuilder().mergeFrom(value);
                     } else {
                         subsId_ = value;
                     }
-                    onChanged();
                 } else {
                     subsIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -13492,13 +12933,13 @@ public final class Monitoring {
              * <code>.monitoring.SubscriptionID subs_id = 1;</code>
              */
             public Builder clearSubsId() {
-                if (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                    onChanged();
-                } else {
-                    subsId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -13506,6 +12947,7 @@ public final class Monitoring {
              * <code>.monitoring.SubscriptionID subs_id = 1;</code>
              */
             public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getSubsIdFieldBuilder().getBuilder();
             }
@@ -13541,7 +12983,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -13565,10 +13007,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -13578,10 +13021,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -13590,15 +13034,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -13606,13 +13051,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 2;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -13620,6 +13065,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 2;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -13664,6 +13110,7 @@ public final class Monitoring {
              */
             public Builder setSamplingDurationS(float value) {
                 samplingDurationS_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -13673,6 +13120,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearSamplingDurationS() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 samplingDurationS_ = 0F;
                 onChanged();
                 return this;
@@ -13696,6 +13144,7 @@ public final class Monitoring {
              */
             public Builder setSamplingIntervalS(float value) {
                 samplingIntervalS_ = value;
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return this;
             }
@@ -13705,6 +13154,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearSamplingIntervalS() {
+                bitField0_ = (bitField0_ & ~0x00000008);
                 samplingIntervalS_ = 0F;
                 onChanged();
                 return this;
@@ -13723,7 +13173,7 @@ public final class Monitoring {
              * @return Whether the startTimestamp field is set.
              */
             public boolean hasStartTimestamp() {
-                return startTimestampBuilder_ != null || startTimestamp_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -13755,10 +13205,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     startTimestamp_ = value;
-                    onChanged();
                 } else {
                     startTimestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -13772,10 +13223,11 @@ public final class Monitoring {
             public Builder setStartTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (startTimestampBuilder_ == null) {
                     startTimestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     startTimestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -13788,15 +13240,16 @@ public final class Monitoring {
              */
             public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (startTimestampBuilder_ == null) {
-                    if (startTimestamp_ != null) {
-                        startTimestamp_ = context.ContextOuterClass.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && startTimestamp_ != null && startTimestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getStartTimestampBuilder().mergeFrom(value);
                     } else {
                         startTimestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     startTimestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -13808,13 +13261,13 @@ public final class Monitoring {
              * <code>.context.Timestamp start_timestamp = 5;</code>
              */
             public Builder clearStartTimestamp() {
-                if (startTimestampBuilder_ == null) {
-                    startTimestamp_ = null;
-                    onChanged();
-                } else {
-                    startTimestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                startTimestamp_ = null;
+                if (startTimestampBuilder_ != null) {
+                    startTimestampBuilder_.dispose();
                     startTimestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -13826,6 +13279,7 @@ public final class Monitoring {
              * <code>.context.Timestamp start_timestamp = 5;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getStartTimestampFieldBuilder().getBuilder();
             }
@@ -13873,7 +13327,7 @@ public final class Monitoring {
              * @return Whether the endTimestamp field is set.
              */
             public boolean hasEndTimestamp() {
-                return endTimestampBuilder_ != null || endTimestamp_ != null;
+                return ((bitField0_ & 0x00000020) != 0);
             }
 
             /**
@@ -13905,10 +13359,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     endTimestamp_ = value;
-                    onChanged();
                 } else {
                     endTimestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -13922,10 +13377,11 @@ public final class Monitoring {
             public Builder setEndTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (endTimestampBuilder_ == null) {
                     endTimestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     endTimestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -13938,15 +13394,16 @@ public final class Monitoring {
              */
             public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (endTimestampBuilder_ == null) {
-                    if (endTimestamp_ != null) {
-                        endTimestamp_ = context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000020) != 0) && endTimestamp_ != null && endTimestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getEndTimestampBuilder().mergeFrom(value);
                     } else {
                         endTimestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     endTimestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -13958,13 +13415,13 @@ public final class Monitoring {
              * <code>.context.Timestamp end_timestamp = 6;</code>
              */
             public Builder clearEndTimestamp() {
-                if (endTimestampBuilder_ == null) {
-                    endTimestamp_ = null;
-                    onChanged();
-                } else {
-                    endTimestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                endTimestamp_ = null;
+                if (endTimestampBuilder_ != null) {
+                    endTimestampBuilder_.dispose();
                     endTimestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -13976,6 +13433,7 @@ public final class Monitoring {
              * <code>.context.Timestamp end_timestamp = 6;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return getEndTimestampFieldBuilder().getBuilder();
             }
@@ -14037,7 +13495,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public SubsDescriptor parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SubsDescriptor(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -14099,57 +13567,6 @@ public final class Monitoring {
             return new SubscriptionID();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SubscriptionID(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 (subsId_ != null) {
-                                    subBuilder = subsId_.toBuilder();
-                                }
-                                subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(subsId_);
-                                    subsId_ = 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 monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
         }
@@ -14186,7 +13603,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
-            return getSubsId();
+            return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -14207,7 +13624,7 @@ public final class Monitoring {
             if (subsId_ != null) {
                 output.writeMessage(1, getSubsId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -14219,7 +13636,7 @@ public final class Monitoring {
             if (subsId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getSubsId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -14239,7 +13656,7 @@ public final class Monitoring {
                 if (!getSubsId().equals(other.getSubsId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -14255,7 +13672,7 @@ public final class Monitoring {
                 hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getSubsId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -14349,26 +13766,19 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.SubscriptionID.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 (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                } else {
-                    subsId_ = null;
+                bitField0_ = 0;
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
                 return this;
@@ -14396,43 +13806,18 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.SubscriptionID buildPartial() {
                 monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
-                if (subsIdBuilder_ == null) {
-                    result.subsId_ = subsId_;
-                } else {
-                    result.subsId_ = subsIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.SubscriptionID result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.subsId_ = subsIdBuilder_ == null ? subsId_ : subsIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -14451,7 +13836,7 @@ public final class Monitoring {
                 if (other.hasSubsId()) {
                     mergeSubsId(other.getSubsId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -14463,20 +13848,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.SubscriptionID parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getSubsIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid subsId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
@@ -14486,7 +13898,7 @@ public final class Monitoring {
              * @return Whether the subsId field is set.
              */
             public boolean hasSubsId() {
-                return subsIdBuilder_ != null || subsId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -14510,10 +13922,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     subsId_ = value;
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14523,10 +13936,11 @@ public final class Monitoring {
             public Builder setSubsId(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (subsIdBuilder_ == null) {
                     subsId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14535,15 +13949,16 @@ public final class Monitoring {
              */
             public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
                 if (subsIdBuilder_ == null) {
-                    if (subsId_ != null) {
-                        subsId_ = context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && subsId_ != null && subsId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getSubsIdBuilder().mergeFrom(value);
                     } else {
                         subsId_ = value;
                     }
-                    onChanged();
                 } else {
                     subsIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -14551,13 +13966,13 @@ public final class Monitoring {
              * <code>.context.Uuid subs_id = 1;</code>
              */
             public Builder clearSubsId() {
-                if (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                    onChanged();
-                } else {
-                    subsId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -14565,6 +13980,7 @@ public final class Monitoring {
              * <code>.context.Uuid subs_id = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getSubsIdFieldBuilder().getBuilder();
             }
@@ -14618,7 +14034,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public SubscriptionID parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SubscriptionID(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -14697,70 +14123,6 @@ public final class Monitoring {
             return new SubsResponse();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SubsResponse(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:
-                            {
-                                monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
-                                if (subsId_ != null) {
-                                    subBuilder = subsId_.toBuilder();
-                                }
-                                subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(subsId_);
-                                    subsId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                monitoring.Monitoring.KpiList.Builder subBuilder = null;
-                                if (kpiList_ != null) {
-                                    subBuilder = kpiList_.toBuilder();
-                                }
-                                kpiList_ = input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiList_);
-                                    kpiList_ = 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 monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
         }
@@ -14797,7 +14159,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
-            return getSubsId();
+            return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
         }
 
         public static final int KPI_LIST_FIELD_NUMBER = 2;
@@ -14827,7 +14189,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder() {
-            return getKpiList();
+            return kpiList_ == null ? monitoring.Monitoring.KpiList.getDefaultInstance() : kpiList_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -14851,7 +14213,7 @@ public final class Monitoring {
             if (kpiList_ != null) {
                 output.writeMessage(2, getKpiList());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -14866,7 +14228,7 @@ public final class Monitoring {
             if (kpiList_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getKpiList());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -14892,7 +14254,7 @@ public final class Monitoring {
                 if (!getKpiList().equals(other.getKpiList()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -14912,7 +14274,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -15006,32 +14368,24 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.SubsResponse.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 (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                } else {
-                    subsId_ = null;
+                bitField0_ = 0;
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
-                if (kpiListBuilder_ == null) {
-                    kpiList_ = null;
-                } else {
-                    kpiList_ = null;
+                kpiList_ = null;
+                if (kpiListBuilder_ != null) {
+                    kpiListBuilder_.dispose();
                     kpiListBuilder_ = null;
                 }
                 return this;
@@ -15059,48 +14413,21 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.SubsResponse buildPartial() {
                 monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
-                if (subsIdBuilder_ == null) {
-                    result.subsId_ = subsId_;
-                } else {
-                    result.subsId_ = subsIdBuilder_.build();
-                }
-                if (kpiListBuilder_ == null) {
-                    result.kpiList_ = kpiList_;
-                } else {
-                    result.kpiList_ = kpiListBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.SubsResponse result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.subsId_ = subsIdBuilder_ == null ? subsId_ : subsIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.kpiList_ = kpiListBuilder_ == null ? kpiList_ : kpiListBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -15122,7 +14449,7 @@ public final class Monitoring {
                 if (other.hasKpiList()) {
                     mergeKpiList(other.getKpiList());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -15134,20 +14461,54 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.SubsResponse parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getSubsIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getKpiListFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.SubscriptionID subsId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
@@ -15157,7 +14518,7 @@ public final class Monitoring {
              * @return Whether the subsId field is set.
              */
             public boolean hasSubsId() {
-                return subsIdBuilder_ != null || subsId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -15181,10 +14542,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     subsId_ = value;
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -15194,10 +14556,11 @@ public final class Monitoring {
             public Builder setSubsId(monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
                 if (subsIdBuilder_ == null) {
                     subsId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     subsIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -15206,15 +14569,16 @@ public final class Monitoring {
              */
             public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
                 if (subsIdBuilder_ == null) {
-                    if (subsId_ != null) {
-                        subsId_ = monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && subsId_ != null && subsId_ != monitoring.Monitoring.SubscriptionID.getDefaultInstance()) {
+                        getSubsIdBuilder().mergeFrom(value);
                     } else {
                         subsId_ = value;
                     }
-                    onChanged();
                 } else {
                     subsIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -15222,13 +14586,13 @@ public final class Monitoring {
              * <code>.monitoring.SubscriptionID subs_id = 1;</code>
              */
             public Builder clearSubsId() {
-                if (subsIdBuilder_ == null) {
-                    subsId_ = null;
-                    onChanged();
-                } else {
-                    subsId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                subsId_ = null;
+                if (subsIdBuilder_ != null) {
+                    subsIdBuilder_.dispose();
                     subsIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -15236,6 +14600,7 @@ public final class Monitoring {
              * <code>.monitoring.SubscriptionID subs_id = 1;</code>
              */
             public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getSubsIdFieldBuilder().getBuilder();
             }
@@ -15271,7 +14636,7 @@ public final class Monitoring {
              * @return Whether the kpiList field is set.
              */
             public boolean hasKpiList() {
-                return kpiListBuilder_ != null || kpiList_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -15295,10 +14660,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiList_ = value;
-                    onChanged();
                 } else {
                     kpiListBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -15308,10 +14674,11 @@ public final class Monitoring {
             public Builder setKpiList(monitoring.Monitoring.KpiList.Builder builderForValue) {
                 if (kpiListBuilder_ == null) {
                     kpiList_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiListBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -15320,15 +14687,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiList(monitoring.Monitoring.KpiList value) {
                 if (kpiListBuilder_ == null) {
-                    if (kpiList_ != null) {
-                        kpiList_ = monitoring.Monitoring.KpiList.newBuilder(kpiList_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && kpiList_ != null && kpiList_ != monitoring.Monitoring.KpiList.getDefaultInstance()) {
+                        getKpiListBuilder().mergeFrom(value);
                     } else {
                         kpiList_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiListBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -15336,13 +14704,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiList kpi_list = 2;</code>
              */
             public Builder clearKpiList() {
-                if (kpiListBuilder_ == null) {
-                    kpiList_ = null;
-                    onChanged();
-                } else {
-                    kpiList_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                kpiList_ = null;
+                if (kpiListBuilder_ != null) {
+                    kpiListBuilder_.dispose();
                     kpiListBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -15350,6 +14718,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiList kpi_list = 2;</code>
              */
             public monitoring.Monitoring.KpiList.Builder getKpiListBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getKpiListFieldBuilder().getBuilder();
             }
@@ -15403,7 +14772,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public SubsResponse parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SubsResponse(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -15460,69 +14839,18 @@ public final class Monitoring {
         private static final long serialVersionUID = 0L;
 
         // Use SubsList.newBuilder() to construct.
-        private SubsList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-            super(builder);
-        }
-
-        private SubsList() {
-            subsDescriptor_ = java.util.Collections.emptyList();
-        }
-
-        @java.lang.Override
-        @SuppressWarnings({ "unused" })
-        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
-            return new SubsList();
-        }
-
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private SubsList(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)) {
-                                    subsDescriptor_ = new java.util.ArrayList<monitoring.Monitoring.SubsDescriptor>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                subsDescriptor_.add(input.readMessage(monitoring.Monitoring.SubsDescriptor.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)) {
-                    subsDescriptor_ = java.util.Collections.unmodifiableList(subsDescriptor_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
+        private SubsList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private SubsList() {
+            subsDescriptor_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new SubsList();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
@@ -15536,6 +14864,7 @@ public final class Monitoring {
 
         public static final int SUBS_DESCRIPTOR_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.SubsDescriptor> subsDescriptor_;
 
         /**
@@ -15596,7 +14925,7 @@ public final class Monitoring {
             for (int i = 0; i < subsDescriptor_.size(); i++) {
                 output.writeMessage(1, subsDescriptor_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -15608,7 +14937,7 @@ public final class Monitoring {
             for (int i = 0; i < subsDescriptor_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, subsDescriptor_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -15624,7 +14953,7 @@ public final class Monitoring {
             monitoring.Monitoring.SubsList other = (monitoring.Monitoring.SubsList) obj;
             if (!getSubsDescriptorList().equals(other.getSubsDescriptorList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -15640,7 +14969,7 @@ public final class Monitoring {
                 hash = (37 * hash) + SUBS_DESCRIPTOR_FIELD_NUMBER;
                 hash = (53 * hash) + getSubsDescriptorList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -15734,29 +15063,23 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.SubsList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getSubsDescriptorFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (subsDescriptorBuilder_ == null) {
                     subsDescriptor_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    subsDescriptor_ = null;
                     subsDescriptorBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -15782,7 +15105,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.SubsList buildPartial() {
                 monitoring.Monitoring.SubsList result = new monitoring.Monitoring.SubsList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.SubsList result) {
                 if (subsDescriptorBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         subsDescriptor_ = java.util.Collections.unmodifiableList(subsDescriptor_);
@@ -15792,38 +15123,10 @@ public final class Monitoring {
                 } else {
                     result.subsDescriptor_ = subsDescriptorBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.SubsList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -15863,7 +15166,7 @@ public final class Monitoring {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -15875,17 +15178,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.SubsList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.SubsDescriptor m = input.readMessage(monitoring.Monitoring.SubsDescriptor.parser(), extensionRegistry);
+                                    if (subsDescriptorBuilder_ == null) {
+                                        ensureSubsDescriptorIsMutable();
+                                        subsDescriptor_.add(m);
+                                    } else {
+                                        subsDescriptorBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.SubsList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -16155,7 +15488,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public SubsList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new SubsList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -16294,108 +15637,6 @@ public final class Monitoring {
             return new AlarmDescriptor();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AlarmDescriptor(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:
-                            {
-                                monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-                                if (alarmId_ != null) {
-                                    subBuilder = alarmId_.toBuilder();
-                                }
-                                alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(alarmId_);
-                                    alarmId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                alarmDescription_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                name_ = s;
-                                break;
-                            }
-                        case 34:
-                            {
-                                monitoring.Monitoring.KpiId.Builder subBuilder = null;
-                                if (kpiId_ != null) {
-                                    subBuilder = kpiId_.toBuilder();
-                                }
-                                kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiId_);
-                                    kpiId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 42:
-                            {
-                                monitoring.Monitoring.KpiValueRange.Builder subBuilder = null;
-                                if (kpiValueRange_ != null) {
-                                    subBuilder = kpiValueRange_.toBuilder();
-                                }
-                                kpiValueRange_ = input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiValueRange_);
-                                    kpiValueRange_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 50:
-                            {
-                                context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-                                if (timestamp_ != null) {
-                                    subBuilder = timestamp_.toBuilder();
-                                }
-                                timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(timestamp_);
-                                    timestamp_ = 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 monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
         }
@@ -16432,12 +15673,13 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-            return getAlarmId();
+            return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
         }
 
         public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object alarmDescription_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object alarmDescription_ = "";
 
         /**
          * <code>string alarm_description = 2;</code>
@@ -16474,7 +15716,8 @@ public final class Monitoring {
 
         public static final int NAME_FIELD_NUMBER = 3;
 
-        private volatile java.lang.Object name_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
 
         /**
          * <code>string name = 3;</code>
@@ -16536,7 +15779,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-            return getKpiId();
+            return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         }
 
         public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 5;
@@ -16566,7 +15809,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
-            return getKpiValueRange();
+            return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
         }
 
         public static final int TIMESTAMP_FIELD_NUMBER = 6;
@@ -16596,7 +15839,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-            return getTimestamp();
+            return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -16617,10 +15860,10 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 output.writeMessage(1, getAlarmId());
             }
-            if (!getAlarmDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alarmDescription_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, alarmDescription_);
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
             }
             if (kpiId_ != null) {
@@ -16632,7 +15875,7 @@ public final class Monitoring {
             if (timestamp_ != null) {
                 output.writeMessage(6, getTimestamp());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -16644,10 +15887,10 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getAlarmId());
             }
-            if (!getAlarmDescriptionBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(alarmDescription_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, alarmDescription_);
             }
-            if (!getNameBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
             }
             if (kpiId_ != null) {
@@ -16659,7 +15902,7 @@ public final class Monitoring {
             if (timestamp_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getTimestamp());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -16701,7 +15944,7 @@ public final class Monitoring {
                 if (!getTimestamp().equals(other.getTimestamp()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -16733,7 +15976,7 @@ public final class Monitoring {
                 hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
                 hash = (53 * hash) + getTimestamp().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -16827,46 +16070,36 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.AlarmDescriptor.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 (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                } else {
-                    alarmId_ = null;
+                bitField0_ = 0;
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
                 alarmDescription_ = "";
                 name_ = "";
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                } else {
-                    kpiId_ = null;
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
-                if (kpiValueRangeBuilder_ == null) {
-                    kpiValueRange_ = null;
-                } else {
-                    kpiValueRange_ = null;
+                kpiValueRange_ = null;
+                if (kpiValueRangeBuilder_ != null) {
+                    kpiValueRangeBuilder_.dispose();
                     kpiValueRangeBuilder_ = null;
                 }
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                } else {
-                    timestamp_ = null;
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
                 return this;
@@ -16894,60 +16127,33 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.AlarmDescriptor buildPartial() {
                 monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
-                if (alarmIdBuilder_ == null) {
-                    result.alarmId_ = alarmId_;
-                } else {
-                    result.alarmId_ = alarmIdBuilder_.build();
-                }
-                result.alarmDescription_ = alarmDescription_;
-                result.name_ = name_;
-                if (kpiIdBuilder_ == null) {
-                    result.kpiId_ = kpiId_;
-                } else {
-                    result.kpiId_ = kpiIdBuilder_.build();
-                }
-                if (kpiValueRangeBuilder_ == null) {
-                    result.kpiValueRange_ = kpiValueRange_;
-                } else {
-                    result.kpiValueRange_ = kpiValueRangeBuilder_.build();
-                }
-                if (timestampBuilder_ == null) {
-                    result.timestamp_ = timestamp_;
-                } else {
-                    result.timestamp_ = timestampBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.AlarmDescriptor result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.alarmId_ = alarmIdBuilder_ == null ? alarmId_ : alarmIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.alarmDescription_ = alarmDescription_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.kpiId_ = kpiIdBuilder_ == null ? kpiId_ : kpiIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.kpiValueRange_ = kpiValueRangeBuilder_ == null ? kpiValueRange_ : kpiValueRangeBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.timestamp_ = timestampBuilder_ == null ? timestamp_ : timestampBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -16968,10 +16174,12 @@ public final class Monitoring {
                 }
                 if (!other.getAlarmDescription().isEmpty()) {
                     alarmDescription_ = other.alarmDescription_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (!other.getName().isEmpty()) {
                     name_ = other.name_;
+                    bitField0_ |= 0x00000004;
                     onChanged();
                 }
                 if (other.hasKpiId()) {
@@ -16983,7 +16191,7 @@ public final class Monitoring {
                 if (other.hasTimestamp()) {
                     mergeTimestamp(other.getTimestamp());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -16995,20 +16203,82 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getAlarmIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    alarmDescription_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    input.readMessage(getKpiIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getKpiValueRangeFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getTimestampFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.AlarmID alarmId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
@@ -17018,7 +16288,7 @@ public final class Monitoring {
              * @return Whether the alarmId field is set.
              */
             public boolean hasAlarmId() {
-                return alarmIdBuilder_ != null || alarmId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -17042,10 +16312,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     alarmId_ = value;
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -17055,10 +16326,11 @@ public final class Monitoring {
             public Builder setAlarmId(monitoring.Monitoring.AlarmID.Builder builderForValue) {
                 if (alarmIdBuilder_ == null) {
                     alarmId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -17067,15 +16339,16 @@ public final class Monitoring {
              */
             public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
                 if (alarmIdBuilder_ == null) {
-                    if (alarmId_ != null) {
-                        alarmId_ = monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && alarmId_ != null && alarmId_ != monitoring.Monitoring.AlarmID.getDefaultInstance()) {
+                        getAlarmIdBuilder().mergeFrom(value);
                     } else {
                         alarmId_ = value;
                     }
-                    onChanged();
                 } else {
                     alarmIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -17083,13 +16356,13 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public Builder clearAlarmId() {
-                if (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                    onChanged();
-                } else {
-                    alarmId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -17097,6 +16370,7 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getAlarmIdFieldBuilder().getBuilder();
             }
@@ -17166,6 +16440,7 @@ public final class Monitoring {
                     throw new NullPointerException();
                 }
                 alarmDescription_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -17176,6 +16451,7 @@ public final class Monitoring {
              */
             public Builder clearAlarmDescription() {
                 alarmDescription_ = getDefaultInstance().getAlarmDescription();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -17191,6 +16467,7 @@ public final class Monitoring {
                 }
                 checkByteStringIsUtf8(value);
                 alarmDescription_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -17238,6 +16515,7 @@ public final class Monitoring {
                     throw new NullPointerException();
                 }
                 name_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -17248,6 +16526,7 @@ public final class Monitoring {
              */
             public Builder clearName() {
                 name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000004);
                 onChanged();
                 return this;
             }
@@ -17263,6 +16542,7 @@ public final class Monitoring {
                 }
                 checkByteStringIsUtf8(value);
                 name_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -17276,7 +16556,7 @@ public final class Monitoring {
              * @return Whether the kpiId field is set.
              */
             public boolean hasKpiId() {
-                return kpiIdBuilder_ != null || kpiId_ != null;
+                return ((bitField0_ & 0x00000008) != 0);
             }
 
             /**
@@ -17300,10 +16580,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiId_ = value;
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -17313,10 +16594,11 @@ public final class Monitoring {
             public Builder setKpiId(monitoring.Monitoring.KpiId.Builder builderForValue) {
                 if (kpiIdBuilder_ == null) {
                     kpiId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -17325,15 +16607,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
                 if (kpiIdBuilder_ == null) {
-                    if (kpiId_ != null) {
-                        kpiId_ = monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000008) != 0) && kpiId_ != null && kpiId_ != monitoring.Monitoring.KpiId.getDefaultInstance()) {
+                        getKpiIdBuilder().mergeFrom(value);
                     } else {
                         kpiId_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000008;
+                onChanged();
                 return this;
             }
 
@@ -17341,13 +16624,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 4;</code>
              */
             public Builder clearKpiId() {
-                if (kpiIdBuilder_ == null) {
-                    kpiId_ = null;
-                    onChanged();
-                } else {
-                    kpiId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000008);
+                kpiId_ = null;
+                if (kpiIdBuilder_ != null) {
+                    kpiIdBuilder_.dispose();
                     kpiIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -17355,6 +16638,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiId kpi_id = 4;</code>
              */
             public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+                bitField0_ |= 0x00000008;
                 onChanged();
                 return getKpiIdFieldBuilder().getBuilder();
             }
@@ -17390,7 +16674,7 @@ public final class Monitoring {
              * @return Whether the kpiValueRange field is set.
              */
             public boolean hasKpiValueRange() {
-                return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
+                return ((bitField0_ & 0x00000010) != 0);
             }
 
             /**
@@ -17414,10 +16698,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiValueRange_ = value;
-                    onChanged();
                 } else {
                     kpiValueRangeBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -17427,10 +16712,11 @@ public final class Monitoring {
             public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
                 if (kpiValueRangeBuilder_ == null) {
                     kpiValueRange_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiValueRangeBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -17439,15 +16725,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
                 if (kpiValueRangeBuilder_ == null) {
-                    if (kpiValueRange_ != null) {
-                        kpiValueRange_ = monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000010) != 0) && kpiValueRange_ != null && kpiValueRange_ != monitoring.Monitoring.KpiValueRange.getDefaultInstance()) {
+                        getKpiValueRangeBuilder().mergeFrom(value);
                     } else {
                         kpiValueRange_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiValueRangeBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000010;
+                onChanged();
                 return this;
             }
 
@@ -17455,13 +16742,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiValueRange kpi_value_range = 5;</code>
              */
             public Builder clearKpiValueRange() {
-                if (kpiValueRangeBuilder_ == null) {
-                    kpiValueRange_ = null;
-                    onChanged();
-                } else {
-                    kpiValueRange_ = null;
+                bitField0_ = (bitField0_ & ~0x00000010);
+                kpiValueRange_ = null;
+                if (kpiValueRangeBuilder_ != null) {
+                    kpiValueRangeBuilder_.dispose();
                     kpiValueRangeBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -17469,6 +16756,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiValueRange kpi_value_range = 5;</code>
              */
             public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
+                bitField0_ |= 0x00000010;
                 onChanged();
                 return getKpiValueRangeFieldBuilder().getBuilder();
             }
@@ -17504,7 +16792,7 @@ public final class Monitoring {
              * @return Whether the timestamp field is set.
              */
             public boolean hasTimestamp() {
-                return timestampBuilder_ != null || timestamp_ != null;
+                return ((bitField0_ & 0x00000020) != 0);
             }
 
             /**
@@ -17528,10 +16816,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     timestamp_ = value;
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -17541,10 +16830,11 @@ public final class Monitoring {
             public Builder setTimestamp(context.ContextOuterClass.Timestamp.Builder builderForValue) {
                 if (timestampBuilder_ == null) {
                     timestamp_ = builderForValue.build();
-                    onChanged();
                 } else {
                     timestampBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -17553,15 +16843,16 @@ public final class Monitoring {
              */
             public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
                 if (timestampBuilder_ == null) {
-                    if (timestamp_ != null) {
-                        timestamp_ = context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000020) != 0) && timestamp_ != null && timestamp_ != context.ContextOuterClass.Timestamp.getDefaultInstance()) {
+                        getTimestampBuilder().mergeFrom(value);
                     } else {
                         timestamp_ = value;
                     }
-                    onChanged();
                 } else {
                     timestampBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000020;
+                onChanged();
                 return this;
             }
 
@@ -17569,13 +16860,13 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 6;</code>
              */
             public Builder clearTimestamp() {
-                if (timestampBuilder_ == null) {
-                    timestamp_ = null;
-                    onChanged();
-                } else {
-                    timestamp_ = null;
+                bitField0_ = (bitField0_ & ~0x00000020);
+                timestamp_ = null;
+                if (timestampBuilder_ != null) {
+                    timestampBuilder_.dispose();
                     timestampBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -17583,6 +16874,7 @@ public final class Monitoring {
              * <code>.context.Timestamp timestamp = 6;</code>
              */
             public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+                bitField0_ |= 0x00000020;
                 onChanged();
                 return getTimestampFieldBuilder().getBuilder();
             }
@@ -17636,7 +16928,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public AlarmDescriptor parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AlarmDescriptor(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -17698,57 +17000,6 @@ public final class Monitoring {
             return new AlarmID();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AlarmID(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 (alarmId_ != null) {
-                                    subBuilder = alarmId_.toBuilder();
-                                }
-                                alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(alarmId_);
-                                    alarmId_ = 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 monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
         }
@@ -17785,7 +17036,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
-            return getAlarmId();
+            return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -17806,7 +17057,7 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 output.writeMessage(1, getAlarmId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -17818,7 +17069,7 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getAlarmId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -17838,7 +17089,7 @@ public final class Monitoring {
                 if (!getAlarmId().equals(other.getAlarmId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -17854,7 +17105,7 @@ public final class Monitoring {
                 hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getAlarmId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -17948,26 +17199,19 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.AlarmID.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 (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                } else {
-                    alarmId_ = null;
+                bitField0_ = 0;
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
                 return this;
@@ -17995,43 +17239,18 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.AlarmID buildPartial() {
                 monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
-                if (alarmIdBuilder_ == null) {
-                    result.alarmId_ = alarmId_;
-                } else {
-                    result.alarmId_ = alarmIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.AlarmID result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.alarmId_ = alarmIdBuilder_ == null ? alarmId_ : alarmIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -18050,7 +17269,7 @@ public final class Monitoring {
                 if (other.hasAlarmId()) {
                     mergeAlarmId(other.getAlarmId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -18062,20 +17281,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.AlarmID parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getAlarmIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid alarmId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
@@ -18085,7 +17331,7 @@ public final class Monitoring {
              * @return Whether the alarmId field is set.
              */
             public boolean hasAlarmId() {
-                return alarmIdBuilder_ != null || alarmId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -18109,10 +17355,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     alarmId_ = value;
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18122,10 +17369,11 @@ public final class Monitoring {
             public Builder setAlarmId(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (alarmIdBuilder_ == null) {
                     alarmId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18134,15 +17382,16 @@ public final class Monitoring {
              */
             public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
                 if (alarmIdBuilder_ == null) {
-                    if (alarmId_ != null) {
-                        alarmId_ = context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && alarmId_ != null && alarmId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getAlarmIdBuilder().mergeFrom(value);
                     } else {
                         alarmId_ = value;
                     }
-                    onChanged();
                 } else {
                     alarmIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18150,13 +17399,13 @@ public final class Monitoring {
              * <code>.context.Uuid alarm_id = 1;</code>
              */
             public Builder clearAlarmId() {
-                if (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                    onChanged();
-                } else {
-                    alarmId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -18164,6 +17413,7 @@ public final class Monitoring {
              * <code>.context.Uuid alarm_id = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getAlarmIdFieldBuilder().getBuilder();
             }
@@ -18217,7 +17467,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public AlarmID parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AlarmID(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -18291,67 +17551,6 @@ public final class Monitoring {
             return new AlarmSubscription();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AlarmSubscription(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:
-                            {
-                                monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-                                if (alarmId_ != null) {
-                                    subBuilder = alarmId_.toBuilder();
-                                }
-                                alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(alarmId_);
-                                    alarmId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 21:
-                            {
-                                subscriptionTimeoutS_ = input.readFloat();
-                                break;
-                            }
-                        case 29:
-                            {
-                                subscriptionFrequencyMs_ = input.readFloat();
-                                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 monitoring.Monitoring.internal_static_monitoring_AlarmSubscription_descriptor;
         }
@@ -18388,12 +17587,12 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-            return getAlarmId();
+            return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
         }
 
         public static final int SUBSCRIPTION_TIMEOUT_S_FIELD_NUMBER = 2;
 
-        private float subscriptionTimeoutS_;
+        private float subscriptionTimeoutS_ = 0F;
 
         /**
          * <code>float subscription_timeout_s = 2;</code>
@@ -18406,7 +17605,7 @@ public final class Monitoring {
 
         public static final int SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER = 3;
 
-        private float subscriptionFrequencyMs_;
+        private float subscriptionFrequencyMs_ = 0F;
 
         /**
          * <code>float subscription_frequency_ms = 3;</code>
@@ -18435,13 +17634,13 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 output.writeMessage(1, getAlarmId());
             }
-            if (subscriptionTimeoutS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(subscriptionTimeoutS_) != 0) {
                 output.writeFloat(2, subscriptionTimeoutS_);
             }
-            if (subscriptionFrequencyMs_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(subscriptionFrequencyMs_) != 0) {
                 output.writeFloat(3, subscriptionFrequencyMs_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -18453,13 +17652,13 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getAlarmId());
             }
-            if (subscriptionTimeoutS_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(subscriptionTimeoutS_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, subscriptionTimeoutS_);
             }
-            if (subscriptionFrequencyMs_ != 0F) {
+            if (java.lang.Float.floatToRawIntBits(subscriptionFrequencyMs_) != 0) {
                 size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, subscriptionFrequencyMs_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -18483,7 +17682,7 @@ public final class Monitoring {
                 return false;
             if (java.lang.Float.floatToIntBits(getSubscriptionFrequencyMs()) != java.lang.Float.floatToIntBits(other.getSubscriptionFrequencyMs()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -18503,7 +17702,7 @@ public final class Monitoring {
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getSubscriptionTimeoutS());
             hash = (37 * hash) + SUBSCRIPTION_FREQUENCY_MS_FIELD_NUMBER;
             hash = (53 * hash) + java.lang.Float.floatToIntBits(getSubscriptionFrequencyMs());
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -18597,26 +17796,19 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.AlarmSubscription.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 (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                } else {
-                    alarmId_ = null;
+                bitField0_ = 0;
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
                 subscriptionTimeoutS_ = 0F;
@@ -18646,45 +17838,24 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.AlarmSubscription buildPartial() {
                 monitoring.Monitoring.AlarmSubscription result = new monitoring.Monitoring.AlarmSubscription(this);
-                if (alarmIdBuilder_ == null) {
-                    result.alarmId_ = alarmId_;
-                } else {
-                    result.alarmId_ = alarmIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.subscriptionTimeoutS_ = subscriptionTimeoutS_;
-                result.subscriptionFrequencyMs_ = subscriptionFrequencyMs_;
                 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);
+            private void buildPartial0(monitoring.Monitoring.AlarmSubscription result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.alarmId_ = alarmIdBuilder_ == null ? alarmId_ : alarmIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.subscriptionTimeoutS_ = subscriptionTimeoutS_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.subscriptionFrequencyMs_ = subscriptionFrequencyMs_;
+                }
             }
 
             @java.lang.Override
@@ -18709,7 +17880,7 @@ public final class Monitoring {
                 if (other.getSubscriptionFrequencyMs() != 0F) {
                     setSubscriptionFrequencyMs(other.getSubscriptionFrequencyMs());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -18721,20 +17892,61 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.AlarmSubscription parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getAlarmIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 21:
+                                {
+                                    subscriptionTimeoutS_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            case 29:
+                                {
+                                    subscriptionFrequencyMs_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.AlarmSubscription) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.AlarmID alarmId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
@@ -18744,7 +17956,7 @@ public final class Monitoring {
              * @return Whether the alarmId field is set.
              */
             public boolean hasAlarmId() {
-                return alarmIdBuilder_ != null || alarmId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -18768,10 +17980,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     alarmId_ = value;
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18781,10 +17994,11 @@ public final class Monitoring {
             public Builder setAlarmId(monitoring.Monitoring.AlarmID.Builder builderForValue) {
                 if (alarmIdBuilder_ == null) {
                     alarmId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18793,15 +18007,16 @@ public final class Monitoring {
              */
             public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
                 if (alarmIdBuilder_ == null) {
-                    if (alarmId_ != null) {
-                        alarmId_ = monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && alarmId_ != null && alarmId_ != monitoring.Monitoring.AlarmID.getDefaultInstance()) {
+                        getAlarmIdBuilder().mergeFrom(value);
                     } else {
                         alarmId_ = value;
                     }
-                    onChanged();
                 } else {
                     alarmIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -18809,13 +18024,13 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public Builder clearAlarmId() {
-                if (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                    onChanged();
-                } else {
-                    alarmId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -18823,6 +18038,7 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getAlarmIdFieldBuilder().getBuilder();
             }
@@ -18867,6 +18083,7 @@ public final class Monitoring {
              */
             public Builder setSubscriptionTimeoutS(float value) {
                 subscriptionTimeoutS_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -18876,6 +18093,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearSubscriptionTimeoutS() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 subscriptionTimeoutS_ = 0F;
                 onChanged();
                 return this;
@@ -18899,6 +18117,7 @@ public final class Monitoring {
              */
             public Builder setSubscriptionFrequencyMs(float value) {
                 subscriptionFrequencyMs_ = value;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
@@ -18908,6 +18127,7 @@ public final class Monitoring {
              * @return This builder for chaining.
              */
             public Builder clearSubscriptionFrequencyMs() {
+                bitField0_ = (bitField0_ & ~0x00000004);
                 subscriptionFrequencyMs_ = 0F;
                 onChanged();
                 return this;
@@ -18940,7 +18160,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public AlarmSubscription parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AlarmSubscription(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -19032,76 +18262,6 @@ public final class Monitoring {
             return new AlarmResponse();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AlarmResponse(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:
-                            {
-                                monitoring.Monitoring.AlarmID.Builder subBuilder = null;
-                                if (alarmId_ != null) {
-                                    subBuilder = alarmId_.toBuilder();
-                                }
-                                alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(alarmId_);
-                                    alarmId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                text_ = s;
-                                break;
-                            }
-                        case 26:
-                            {
-                                monitoring.Monitoring.KpiList.Builder subBuilder = null;
-                                if (kpiList_ != null) {
-                                    subBuilder = kpiList_.toBuilder();
-                                }
-                                kpiList_ = input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(kpiList_);
-                                    kpiList_ = 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 monitoring.Monitoring.internal_static_monitoring_AlarmResponse_descriptor;
         }
@@ -19138,12 +18298,13 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
-            return getAlarmId();
+            return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
         }
 
         public static final int TEXT_FIELD_NUMBER = 2;
 
-        private volatile java.lang.Object text_;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object text_ = "";
 
         /**
          * <code>string text = 2;</code>
@@ -19205,7 +18366,7 @@ public final class Monitoring {
          */
         @java.lang.Override
         public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder() {
-            return getKpiList();
+            return kpiList_ == null ? monitoring.Monitoring.KpiList.getDefaultInstance() : kpiList_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -19226,13 +18387,13 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 output.writeMessage(1, getAlarmId());
             }
-            if (!getTextBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(text_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, text_);
             }
             if (kpiList_ != null) {
                 output.writeMessage(3, getKpiList());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -19244,13 +18405,13 @@ public final class Monitoring {
             if (alarmId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getAlarmId());
             }
-            if (!getTextBytes().isEmpty()) {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(text_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, text_);
             }
             if (kpiList_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getKpiList());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -19278,7 +18439,7 @@ public final class Monitoring {
                 if (!getKpiList().equals(other.getKpiList()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -19300,7 +18461,7 @@ public final class Monitoring {
                 hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
                 hash = (53 * hash) + getKpiList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -19394,33 +18555,25 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.AlarmResponse.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 (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                } else {
-                    alarmId_ = null;
+                bitField0_ = 0;
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
                 text_ = "";
-                if (kpiListBuilder_ == null) {
-                    kpiList_ = null;
-                } else {
-                    kpiList_ = null;
+                kpiList_ = null;
+                if (kpiListBuilder_ != null) {
+                    kpiListBuilder_.dispose();
                     kpiListBuilder_ = null;
                 }
                 return this;
@@ -19448,49 +18601,24 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.AlarmResponse buildPartial() {
                 monitoring.Monitoring.AlarmResponse result = new monitoring.Monitoring.AlarmResponse(this);
-                if (alarmIdBuilder_ == null) {
-                    result.alarmId_ = alarmId_;
-                } else {
-                    result.alarmId_ = alarmIdBuilder_.build();
-                }
-                result.text_ = text_;
-                if (kpiListBuilder_ == null) {
-                    result.kpiList_ = kpiList_;
-                } else {
-                    result.kpiList_ = kpiListBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(monitoring.Monitoring.AlarmResponse result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.alarmId_ = alarmIdBuilder_ == null ? alarmId_ : alarmIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.text_ = text_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.kpiList_ = kpiListBuilder_ == null ? kpiList_ : kpiListBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -19511,12 +18639,13 @@ public final class Monitoring {
                 }
                 if (!other.getText().isEmpty()) {
                     text_ = other.text_;
+                    bitField0_ |= 0x00000002;
                     onChanged();
                 }
                 if (other.hasKpiList()) {
                     mergeKpiList(other.getKpiList());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -19528,20 +18657,61 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.AlarmResponse parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getAlarmIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    text_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    input.readMessage(getKpiListFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.AlarmResponse) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private monitoring.Monitoring.AlarmID alarmId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
@@ -19551,7 +18721,7 @@ public final class Monitoring {
              * @return Whether the alarmId field is set.
              */
             public boolean hasAlarmId() {
-                return alarmIdBuilder_ != null || alarmId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -19575,10 +18745,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     alarmId_ = value;
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -19588,10 +18759,11 @@ public final class Monitoring {
             public Builder setAlarmId(monitoring.Monitoring.AlarmID.Builder builderForValue) {
                 if (alarmIdBuilder_ == null) {
                     alarmId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     alarmIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -19600,15 +18772,16 @@ public final class Monitoring {
              */
             public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
                 if (alarmIdBuilder_ == null) {
-                    if (alarmId_ != null) {
-                        alarmId_ = monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && alarmId_ != null && alarmId_ != monitoring.Monitoring.AlarmID.getDefaultInstance()) {
+                        getAlarmIdBuilder().mergeFrom(value);
                     } else {
                         alarmId_ = value;
                     }
-                    onChanged();
                 } else {
                     alarmIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -19616,13 +18789,13 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public Builder clearAlarmId() {
-                if (alarmIdBuilder_ == null) {
-                    alarmId_ = null;
-                    onChanged();
-                } else {
-                    alarmId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                alarmId_ = null;
+                if (alarmIdBuilder_ != null) {
+                    alarmIdBuilder_.dispose();
                     alarmIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -19630,6 +18803,7 @@ public final class Monitoring {
              * <code>.monitoring.AlarmID alarm_id = 1;</code>
              */
             public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getAlarmIdFieldBuilder().getBuilder();
             }
@@ -19699,6 +18873,7 @@ public final class Monitoring {
                     throw new NullPointerException();
                 }
                 text_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -19709,6 +18884,7 @@ public final class Monitoring {
              */
             public Builder clearText() {
                 text_ = getDefaultInstance().getText();
+                bitField0_ = (bitField0_ & ~0x00000002);
                 onChanged();
                 return this;
             }
@@ -19724,6 +18900,7 @@ public final class Monitoring {
                 }
                 checkByteStringIsUtf8(value);
                 text_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -19737,7 +18914,7 @@ public final class Monitoring {
              * @return Whether the kpiList field is set.
              */
             public boolean hasKpiList() {
-                return kpiListBuilder_ != null || kpiList_ != null;
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
@@ -19761,10 +18938,11 @@ public final class Monitoring {
                         throw new NullPointerException();
                     }
                     kpiList_ = value;
-                    onChanged();
                 } else {
                     kpiListBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -19774,10 +18952,11 @@ public final class Monitoring {
             public Builder setKpiList(monitoring.Monitoring.KpiList.Builder builderForValue) {
                 if (kpiListBuilder_ == null) {
                     kpiList_ = builderForValue.build();
-                    onChanged();
                 } else {
                     kpiListBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -19786,15 +18965,16 @@ public final class Monitoring {
              */
             public Builder mergeKpiList(monitoring.Monitoring.KpiList value) {
                 if (kpiListBuilder_ == null) {
-                    if (kpiList_ != null) {
-                        kpiList_ = monitoring.Monitoring.KpiList.newBuilder(kpiList_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000004) != 0) && kpiList_ != null && kpiList_ != monitoring.Monitoring.KpiList.getDefaultInstance()) {
+                        getKpiListBuilder().mergeFrom(value);
                     } else {
                         kpiList_ = value;
                     }
-                    onChanged();
                 } else {
                     kpiListBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000004;
+                onChanged();
                 return this;
             }
 
@@ -19802,13 +18982,13 @@ public final class Monitoring {
              * <code>.monitoring.KpiList kpi_list = 3;</code>
              */
             public Builder clearKpiList() {
-                if (kpiListBuilder_ == null) {
-                    kpiList_ = null;
-                    onChanged();
-                } else {
-                    kpiList_ = null;
+                bitField0_ = (bitField0_ & ~0x00000004);
+                kpiList_ = null;
+                if (kpiListBuilder_ != null) {
+                    kpiListBuilder_.dispose();
                     kpiListBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -19816,6 +18996,7 @@ public final class Monitoring {
              * <code>.monitoring.KpiList kpi_list = 3;</code>
              */
             public monitoring.Monitoring.KpiList.Builder getKpiListBuilder() {
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getKpiListFieldBuilder().getBuilder();
             }
@@ -19869,7 +19050,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public AlarmResponse parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AlarmResponse(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -19940,57 +19131,6 @@ public final class Monitoring {
             return new AlarmList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private AlarmList(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)) {
-                                    alarmDescriptor_ = new java.util.ArrayList<monitoring.Monitoring.AlarmDescriptor>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                alarmDescriptor_.add(input.readMessage(monitoring.Monitoring.AlarmDescriptor.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)) {
-                    alarmDescriptor_ = java.util.Collections.unmodifiableList(alarmDescriptor_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return monitoring.Monitoring.internal_static_monitoring_AlarmList_descriptor;
         }
@@ -20002,6 +19142,7 @@ public final class Monitoring {
 
         public static final int ALARM_DESCRIPTOR_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<monitoring.Monitoring.AlarmDescriptor> alarmDescriptor_;
 
         /**
@@ -20062,7 +19203,7 @@ public final class Monitoring {
             for (int i = 0; i < alarmDescriptor_.size(); i++) {
                 output.writeMessage(1, alarmDescriptor_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -20074,7 +19215,7 @@ public final class Monitoring {
             for (int i = 0; i < alarmDescriptor_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, alarmDescriptor_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -20090,7 +19231,7 @@ public final class Monitoring {
             monitoring.Monitoring.AlarmList other = (monitoring.Monitoring.AlarmList) obj;
             if (!getAlarmDescriptorList().equals(other.getAlarmDescriptorList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -20106,7 +19247,7 @@ public final class Monitoring {
                 hash = (37 * hash) + ALARM_DESCRIPTOR_FIELD_NUMBER;
                 hash = (53 * hash) + getAlarmDescriptorList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -20200,29 +19341,23 @@ public final class Monitoring {
 
             // Construct using monitoring.Monitoring.AlarmList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getAlarmDescriptorFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (alarmDescriptorBuilder_ == null) {
                     alarmDescriptor_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    alarmDescriptor_ = null;
                     alarmDescriptorBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -20248,7 +19383,15 @@ public final class Monitoring {
             @java.lang.Override
             public monitoring.Monitoring.AlarmList buildPartial() {
                 monitoring.Monitoring.AlarmList result = new monitoring.Monitoring.AlarmList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(monitoring.Monitoring.AlarmList result) {
                 if (alarmDescriptorBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         alarmDescriptor_ = java.util.Collections.unmodifiableList(alarmDescriptor_);
@@ -20258,38 +19401,10 @@ public final class Monitoring {
                 } else {
                     result.alarmDescriptor_ = alarmDescriptorBuilder_.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);
+            private void buildPartial0(monitoring.Monitoring.AlarmList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -20329,7 +19444,7 @@ public final class Monitoring {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -20341,17 +19456,47 @@ public final class Monitoring {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                monitoring.Monitoring.AlarmList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    monitoring.Monitoring.AlarmDescriptor m = input.readMessage(monitoring.Monitoring.AlarmDescriptor.parser(), extensionRegistry);
+                                    if (alarmDescriptorBuilder_ == null) {
+                                        ensureAlarmDescriptorIsMutable();
+                                        alarmDescriptor_.add(m);
+                                    } else {
+                                        alarmDescriptorBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (monitoring.Monitoring.AlarmList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -20621,7 +19766,17 @@ public final class Monitoring {
 
             @java.lang.Override
             public AlarmList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new AlarmList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
diff --git a/src/ztp/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/ztp/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index 83dffd6257d5685ee7d49c45258bbf1d68d3a817..7a275e5777320134c04591f4d9c29e23035148bf 100644
--- a/src/ztp/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/ztp/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -4,7 +4,8 @@ import static io.grpc.MethodDescriptor.generateFullMethodName;
 
 /**
  */
-@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.38.1)", comments = "Source: monitoring.proto")
+@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.55.1)", comments = "Source: monitoring.proto")
+@io.grpc.stub.annotations.GrpcGenerated
 public final class MonitoringServiceGrpc {
 
     private MonitoringServiceGrpc() {
@@ -327,123 +328,130 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public static abstract class MonitoringServiceImplBase implements io.grpc.BindableService {
+    public interface AsyncService {
 
         /**
          */
-        public void setKpi(monitoring.Monitoring.KpiDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+        default void setKpi(monitoring.Monitoring.KpiDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiMethod(), responseObserver);
         }
 
         /**
          */
-        public void deleteKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void deleteKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
         }
 
         /**
          */
-        public void getKpiDescriptor(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+        default void getKpiDescriptor(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
         }
 
         /**
          */
-        public void getKpiDescriptorList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
+        default void getKpiDescriptorList(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorListMethod(), responseObserver);
         }
 
         /**
          */
-        public void includeKpi(monitoring.Monitoring.Kpi request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void includeKpi(monitoring.Monitoring.Kpi request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getIncludeKpiMethod(), responseObserver);
         }
 
         /**
          */
-        public void monitorKpi(monitoring.Monitoring.MonitorKpiRequest request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void monitorKpi(monitoring.Monitoring.MonitorKpiRequest request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getMonitorKpiMethod(), responseObserver);
         }
 
         /**
          */
-        public void queryKpiData(monitoring.Monitoring.KpiQuery request, io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable> responseObserver) {
+        default void queryKpiData(monitoring.Monitoring.KpiQuery request, io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getQueryKpiDataMethod(), responseObserver);
         }
 
         /**
          */
-        public void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsResponse> responseObserver) {
+        default void setKpiSubscription(monitoring.Monitoring.SubsDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsResponse> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiSubscriptionMethod(), responseObserver);
         }
 
         /**
          */
-        public void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
+        default void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubsDescriptorMethod(), responseObserver);
         }
 
         /**
          */
-        public void getSubscriptions(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsList> responseObserver) {
+        default void getSubscriptions(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubscriptionsMethod(), responseObserver);
         }
 
         /**
          */
-        public void deleteSubscription(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void deleteSubscription(monitoring.Monitoring.SubscriptionID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteSubscriptionMethod(), responseObserver);
         }
 
         /**
          */
-        public void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
+        default void setKpiAlarm(monitoring.Monitoring.AlarmDescriptor request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetKpiAlarmMethod(), responseObserver);
         }
 
         /**
          */
-        public void getAlarms(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmList> responseObserver) {
+        default void getAlarms(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmsMethod(), responseObserver);
         }
 
         /**
          */
-        public void getAlarmDescriptor(monitoring.Monitoring.AlarmID request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
+        default void getAlarmDescriptor(monitoring.Monitoring.AlarmID request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmDescriptorMethod(), responseObserver);
         }
 
         /**
          */
-        public void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
+        default void getAlarmResponseStream(monitoring.Monitoring.AlarmSubscription request, io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
         }
 
         /**
          */
-        public void deleteAlarm(monitoring.Monitoring.AlarmID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+        default void deleteAlarm(monitoring.Monitoring.AlarmID request, io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteAlarmMethod(), responseObserver);
         }
 
         /**
          */
-        public void getStreamKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+        default void getStreamKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
         }
 
         /**
          */
-        public void getInstantKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+        default void getInstantKpi(monitoring.Monitoring.KpiId request, io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
         }
+    }
+
+    /**
+     * Base class for the server implementation of the service MonitoringService.
+     */
+    public static abstract class MonitoringServiceImplBase implements io.grpc.BindableService, AsyncService {
 
         @java.lang.Override
         public io.grpc.ServerServiceDefinition bindService() {
-            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getSetKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>(this, METHODID_SET_KPI))).addMethod(getDeleteKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>(this, METHODID_DELETE_KPI))).addMethod(getGetKpiDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>(this, METHODID_GET_KPI_DESCRIPTOR))).addMethod(getGetKpiDescriptorListMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList>(this, METHODID_GET_KPI_DESCRIPTOR_LIST))).addMethod(getIncludeKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.Kpi, context.ContextOuterClass.Empty>(this, METHODID_INCLUDE_KPI))).addMethod(getMonitorKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.MonitorKpiRequest, context.ContextOuterClass.Empty>(this, METHODID_MONITOR_KPI))).addMethod(getQueryKpiDataMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.RawKpiTable>(this, METHODID_QUERY_KPI_DATA))).addMethod(getSetKpiSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.SubsResponse>(this, METHODID_SET_KPI_SUBSCRIPTION))).addMethod(getGetSubsDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor>(this, METHODID_GET_SUBS_DESCRIPTOR))).addMethod(getGetSubscriptionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsList>(this, METHODID_GET_SUBSCRIPTIONS))).addMethod(getDeleteSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>(this, METHODID_DELETE_SUBSCRIPTION))).addMethod(getSetKpiAlarmMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>(this, METHODID_SET_KPI_ALARM))).addMethod(getGetAlarmsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmList>(this, METHODID_GET_ALARMS))).addMethod(getGetAlarmDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor>(this, METHODID_GET_ALARM_DESCRIPTOR))).addMethod(getGetAlarmResponseStreamMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse>(this, METHODID_GET_ALARM_RESPONSE_STREAM))).addMethod(getDeleteAlarmMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty>(this, METHODID_DELETE_ALARM))).addMethod(getGetStreamKpiMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>(this, METHODID_GET_STREAM_KPI))).addMethod(getGetInstantKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>(this, METHODID_GET_INSTANT_KPI))).build();
+            return MonitoringServiceGrpc.bindService(this);
         }
     }
 
     /**
+     * A stub to allow clients to do asynchronous rpc calls to service MonitoringService.
      */
     public static class MonitoringServiceStub extends io.grpc.stub.AbstractAsyncStub<MonitoringServiceStub> {
 
@@ -566,6 +574,7 @@ public final class MonitoringServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do synchronous rpc calls to service MonitoringService.
      */
     public static class MonitoringServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<MonitoringServiceBlockingStub> {
 
@@ -688,6 +697,7 @@ public final class MonitoringServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do ListenableFuture-style rpc calls to service MonitoringService.
      */
     public static class MonitoringServiceFutureStub extends io.grpc.stub.AbstractFutureStub<MonitoringServiceFutureStub> {
 
@@ -829,11 +839,11 @@ public final class MonitoringServiceGrpc {
 
     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 MonitoringServiceImplBase serviceImpl;
+        private final AsyncService serviceImpl;
 
         private final int methodId;
 
-        MethodHandlers(MonitoringServiceImplBase serviceImpl, int methodId) {
+        MethodHandlers(AsyncService serviceImpl, int methodId) {
             this.serviceImpl = serviceImpl;
             this.methodId = methodId;
         }
@@ -911,6 +921,10 @@ public final class MonitoringServiceGrpc {
         }
     }
 
+    public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getSetKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>(service, METHODID_SET_KPI))).addMethod(getDeleteKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>(service, METHODID_DELETE_KPI))).addMethod(getGetKpiDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>(service, METHODID_GET_KPI_DESCRIPTOR))).addMethod(getGetKpiDescriptorListMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList>(service, METHODID_GET_KPI_DESCRIPTOR_LIST))).addMethod(getIncludeKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.Kpi, context.ContextOuterClass.Empty>(service, METHODID_INCLUDE_KPI))).addMethod(getMonitorKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.MonitorKpiRequest, context.ContextOuterClass.Empty>(service, METHODID_MONITOR_KPI))).addMethod(getQueryKpiDataMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.RawKpiTable>(service, METHODID_QUERY_KPI_DATA))).addMethod(getSetKpiSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.SubsResponse>(service, METHODID_SET_KPI_SUBSCRIPTION))).addMethod(getGetSubsDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor>(service, METHODID_GET_SUBS_DESCRIPTOR))).addMethod(getGetSubscriptionsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsList>(service, METHODID_GET_SUBSCRIPTIONS))).addMethod(getDeleteSubscriptionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.SubscriptionID, context.ContextOuterClass.Empty>(service, METHODID_DELETE_SUBSCRIPTION))).addMethod(getSetKpiAlarmMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>(service, METHODID_SET_KPI_ALARM))).addMethod(getGetAlarmsMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmList>(service, METHODID_GET_ALARMS))).addMethod(getGetAlarmDescriptorMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor>(service, METHODID_GET_ALARM_DESCRIPTOR))).addMethod(getGetAlarmResponseStreamMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.AlarmSubscription, monitoring.Monitoring.AlarmResponse>(service, METHODID_GET_ALARM_RESPONSE_STREAM))).addMethod(getDeleteAlarmMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.AlarmID, context.ContextOuterClass.Empty>(service, METHODID_DELETE_ALARM))).addMethod(getGetStreamKpiMethod(), io.grpc.stub.ServerCalls.asyncServerStreamingCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>(service, METHODID_GET_STREAM_KPI))).addMethod(getGetInstantKpiMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>(service, METHODID_GET_INSTANT_KPI))).build();
+    }
+
     private static abstract class MonitoringServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
 
         MonitoringServiceBaseDescriptorSupplier() {
diff --git a/src/ztp/target/generated-sources/grpc/ztp/Ztp.java b/src/ztp/target/generated-sources/grpc/ztp/Ztp.java
index bef889c0db021ad9741d228548ffb434bdd75b9b..0812fc8eb63c7024fba5a59a20b283045368e019 100644
--- a/src/ztp/target/generated-sources/grpc/ztp/Ztp.java
+++ b/src/ztp/target/generated-sources/grpc/ztp/Ztp.java
@@ -322,70 +322,6 @@ public final class Ztp {
             return new DeviceRoleId();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceRoleId(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 (devRoleId_ != null) {
-                                    subBuilder = devRoleId_.toBuilder();
-                                }
-                                devRoleId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devRoleId_);
-                                    devRoleId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-                                if (devId_ != null) {
-                                    subBuilder = devId_.toBuilder();
-                                }
-                                devId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devId_);
-                                    devId_ = 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 ztp.Ztp.internal_static_ztp_DeviceRoleId_descriptor;
         }
@@ -422,7 +358,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public context.ContextOuterClass.UuidOrBuilder getDevRoleIdOrBuilder() {
-            return getDevRoleId();
+            return devRoleId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : devRoleId_;
         }
 
         public static final int DEVID_FIELD_NUMBER = 2;
@@ -452,7 +388,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceIdOrBuilder getDevIdOrBuilder() {
-            return getDevId();
+            return devId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : devId_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -476,7 +412,7 @@ public final class Ztp {
             if (devId_ != null) {
                 output.writeMessage(2, getDevId());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -491,7 +427,7 @@ public final class Ztp {
             if (devId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDevId());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -517,7 +453,7 @@ public final class Ztp {
                 if (!getDevId().equals(other.getDevId()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -537,7 +473,7 @@ public final class Ztp {
                 hash = (37 * hash) + DEVID_FIELD_NUMBER;
                 hash = (53 * hash) + getDevId().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -631,32 +567,24 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceRoleId.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 (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = 0;
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
-                if (devIdBuilder_ == null) {
-                    devId_ = null;
-                } else {
-                    devId_ = null;
+                devId_ = null;
+                if (devIdBuilder_ != null) {
+                    devIdBuilder_.dispose();
                     devIdBuilder_ = null;
                 }
                 return this;
@@ -684,48 +612,21 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceRoleId buildPartial() {
                 ztp.Ztp.DeviceRoleId result = new ztp.Ztp.DeviceRoleId(this);
-                if (devRoleIdBuilder_ == null) {
-                    result.devRoleId_ = devRoleId_;
-                } else {
-                    result.devRoleId_ = devRoleIdBuilder_.build();
-                }
-                if (devIdBuilder_ == null) {
-                    result.devId_ = devId_;
-                } else {
-                    result.devId_ = devIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(ztp.Ztp.DeviceRoleId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.devRoleId_ = devRoleIdBuilder_ == null ? devRoleId_ : devRoleIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.devId_ = devIdBuilder_ == null ? devId_ : devIdBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -747,7 +648,7 @@ public final class Ztp {
                 if (other.hasDevId()) {
                     mergeDevId(other.getDevId());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -759,20 +660,54 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceRoleId parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDevRoleIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getDevIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceRoleId) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private context.ContextOuterClass.Uuid devRoleId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> devRoleIdBuilder_;
@@ -782,7 +717,7 @@ public final class Ztp {
              * @return Whether the devRoleId field is set.
              */
             public boolean hasDevRoleId() {
-                return devRoleIdBuilder_ != null || devRoleId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -806,10 +741,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devRoleId_ = value;
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -819,10 +755,11 @@ public final class Ztp {
             public Builder setDevRoleId(context.ContextOuterClass.Uuid.Builder builderForValue) {
                 if (devRoleIdBuilder_ == null) {
                     devRoleId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -831,15 +768,16 @@ public final class Ztp {
              */
             public Builder mergeDevRoleId(context.ContextOuterClass.Uuid value) {
                 if (devRoleIdBuilder_ == null) {
-                    if (devRoleId_ != null) {
-                        devRoleId_ = context.ContextOuterClass.Uuid.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && devRoleId_ != null && devRoleId_ != context.ContextOuterClass.Uuid.getDefaultInstance()) {
+                        getDevRoleIdBuilder().mergeFrom(value);
                     } else {
                         devRoleId_ = value;
                     }
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -847,13 +785,13 @@ public final class Ztp {
              * <code>.context.Uuid devRoleId = 1;</code>
              */
             public Builder clearDevRoleId() {
-                if (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                    onChanged();
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -861,6 +799,7 @@ public final class Ztp {
              * <code>.context.Uuid devRoleId = 1;</code>
              */
             public context.ContextOuterClass.Uuid.Builder getDevRoleIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDevRoleIdFieldBuilder().getBuilder();
             }
@@ -896,7 +835,7 @@ public final class Ztp {
              * @return Whether the devId field is set.
              */
             public boolean hasDevId() {
-                return devIdBuilder_ != null || devId_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -920,10 +859,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devId_ = value;
-                    onChanged();
                 } else {
                     devIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -933,10 +873,11 @@ public final class Ztp {
             public Builder setDevId(context.ContextOuterClass.DeviceId.Builder builderForValue) {
                 if (devIdBuilder_ == null) {
                     devId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -945,15 +886,16 @@ public final class Ztp {
              */
             public Builder mergeDevId(context.ContextOuterClass.DeviceId value) {
                 if (devIdBuilder_ == null) {
-                    if (devId_ != null) {
-                        devId_ = context.ContextOuterClass.DeviceId.newBuilder(devId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && devId_ != null && devId_ != context.ContextOuterClass.DeviceId.getDefaultInstance()) {
+                        getDevIdBuilder().mergeFrom(value);
                     } else {
                         devId_ = value;
                     }
-                    onChanged();
                 } else {
                     devIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -961,13 +903,13 @@ public final class Ztp {
              * <code>.context.DeviceId devId = 2;</code>
              */
             public Builder clearDevId() {
-                if (devIdBuilder_ == null) {
-                    devId_ = null;
-                    onChanged();
-                } else {
-                    devId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                devId_ = null;
+                if (devIdBuilder_ != null) {
+                    devIdBuilder_.dispose();
                     devIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -975,6 +917,7 @@ public final class Ztp {
              * <code>.context.DeviceId devId = 2;</code>
              */
             public context.ContextOuterClass.DeviceId.Builder getDevIdBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getDevIdFieldBuilder().getBuilder();
             }
@@ -1028,7 +971,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceRoleId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceRoleId(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -1103,63 +1056,6 @@ public final class Ztp {
             return new DeviceRole();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceRole(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:
-                            {
-                                ztp.Ztp.DeviceRoleId.Builder subBuilder = null;
-                                if (devRoleId_ != null) {
-                                    subBuilder = devRoleId_.toBuilder();
-                                }
-                                devRoleId_ = input.readMessage(ztp.Ztp.DeviceRoleId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devRoleId_);
-                                    devRoleId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 16:
-                            {
-                                int rawValue = input.readEnum();
-                                devRoleType_ = 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 ztp.Ztp.internal_static_ztp_DeviceRole_descriptor;
         }
@@ -1196,12 +1092,12 @@ public final class Ztp {
          */
         @java.lang.Override
         public ztp.Ztp.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
-            return getDevRoleId();
+            return devRoleId_ == null ? ztp.Ztp.DeviceRoleId.getDefaultInstance() : devRoleId_;
         }
 
         public static final int DEVROLETYPE_FIELD_NUMBER = 2;
 
-        private int devRoleType_;
+        private int devRoleType_ = 0;
 
         /**
          * <code>.ztp.DeviceRoleType devRoleType = 2;</code>
@@ -1218,8 +1114,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public ztp.Ztp.DeviceRoleType getDevRoleType() {
-            @SuppressWarnings("deprecation")
-            ztp.Ztp.DeviceRoleType result = ztp.Ztp.DeviceRoleType.valueOf(devRoleType_);
+            ztp.Ztp.DeviceRoleType result = ztp.Ztp.DeviceRoleType.forNumber(devRoleType_);
             return result == null ? ztp.Ztp.DeviceRoleType.UNRECOGNIZED : result;
         }
 
@@ -1244,7 +1139,7 @@ public final class Ztp {
             if (devRoleType_ != ztp.Ztp.DeviceRoleType.NONE.getNumber()) {
                 output.writeEnum(2, devRoleType_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -1259,7 +1154,7 @@ public final class Ztp {
             if (devRoleType_ != ztp.Ztp.DeviceRoleType.NONE.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, devRoleType_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -1281,7 +1176,7 @@ public final class Ztp {
             }
             if (devRoleType_ != other.devRoleType_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -1299,7 +1194,7 @@ public final class Ztp {
             }
             hash = (37 * hash) + DEVROLETYPE_FIELD_NUMBER;
             hash = (53 * hash) + devRoleType_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -1393,26 +1288,19 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceRole.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 (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = 0;
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
                 devRoleType_ = 0;
@@ -1441,44 +1329,21 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceRole buildPartial() {
                 ztp.Ztp.DeviceRole result = new ztp.Ztp.DeviceRole(this);
-                if (devRoleIdBuilder_ == null) {
-                    result.devRoleId_ = devRoleId_;
-                } else {
-                    result.devRoleId_ = devRoleIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.devRoleType_ = devRoleType_;
                 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);
+            private void buildPartial0(ztp.Ztp.DeviceRole result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.devRoleId_ = devRoleIdBuilder_ == null ? devRoleId_ : devRoleIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.devRoleType_ = devRoleType_;
+                }
             }
 
             @java.lang.Override
@@ -1500,7 +1365,7 @@ public final class Ztp {
                 if (other.devRoleType_ != 0) {
                     setDevRoleTypeValue(other.getDevRoleTypeValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -1512,20 +1377,54 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceRole parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDevRoleIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    devRoleType_ = input.readEnum();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceRole) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private ztp.Ztp.DeviceRoleId devRoleId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<ztp.Ztp.DeviceRoleId, ztp.Ztp.DeviceRoleId.Builder, ztp.Ztp.DeviceRoleIdOrBuilder> devRoleIdBuilder_;
@@ -1535,7 +1434,7 @@ public final class Ztp {
              * @return Whether the devRoleId field is set.
              */
             public boolean hasDevRoleId() {
-                return devRoleIdBuilder_ != null || devRoleId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -1559,10 +1458,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devRoleId_ = value;
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1572,10 +1472,11 @@ public final class Ztp {
             public Builder setDevRoleId(ztp.Ztp.DeviceRoleId.Builder builderForValue) {
                 if (devRoleIdBuilder_ == null) {
                     devRoleId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1584,15 +1485,16 @@ public final class Ztp {
              */
             public Builder mergeDevRoleId(ztp.Ztp.DeviceRoleId value) {
                 if (devRoleIdBuilder_ == null) {
-                    if (devRoleId_ != null) {
-                        devRoleId_ = ztp.Ztp.DeviceRoleId.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && devRoleId_ != null && devRoleId_ != ztp.Ztp.DeviceRoleId.getDefaultInstance()) {
+                        getDevRoleIdBuilder().mergeFrom(value);
                     } else {
                         devRoleId_ = value;
                     }
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -1600,13 +1502,13 @@ public final class Ztp {
              * <code>.ztp.DeviceRoleId devRoleId = 1;</code>
              */
             public Builder clearDevRoleId() {
-                if (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                    onChanged();
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -1614,6 +1516,7 @@ public final class Ztp {
              * <code>.ztp.DeviceRoleId devRoleId = 1;</code>
              */
             public ztp.Ztp.DeviceRoleId.Builder getDevRoleIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDevRoleIdFieldBuilder().getBuilder();
             }
@@ -1658,6 +1561,7 @@ public final class Ztp {
              */
             public Builder setDevRoleTypeValue(int value) {
                 devRoleType_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -1668,8 +1572,7 @@ public final class Ztp {
              */
             @java.lang.Override
             public ztp.Ztp.DeviceRoleType getDevRoleType() {
-                @SuppressWarnings("deprecation")
-                ztp.Ztp.DeviceRoleType result = ztp.Ztp.DeviceRoleType.valueOf(devRoleType_);
+                ztp.Ztp.DeviceRoleType result = ztp.Ztp.DeviceRoleType.forNumber(devRoleType_);
                 return result == null ? ztp.Ztp.DeviceRoleType.UNRECOGNIZED : result;
             }
 
@@ -1682,6 +1585,7 @@ public final class Ztp {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000002;
                 devRoleType_ = value.getNumber();
                 onChanged();
                 return this;
@@ -1692,6 +1596,7 @@ public final class Ztp {
              * @return This builder for chaining.
              */
             public Builder clearDevRoleType() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 devRoleType_ = 0;
                 onChanged();
                 return this;
@@ -1724,7 +1629,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceRole parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceRole(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -1803,70 +1718,6 @@ public final class Ztp {
             return new DeviceRoleConfig();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceRoleConfig(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:
-                            {
-                                ztp.Ztp.DeviceRole.Builder subBuilder = null;
-                                if (devRole_ != null) {
-                                    subBuilder = devRole_.toBuilder();
-                                }
-                                devRole_ = input.readMessage(ztp.Ztp.DeviceRole.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devRole_);
-                                    devRole_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 18:
-                            {
-                                context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-                                if (devConfig_ != null) {
-                                    subBuilder = devConfig_.toBuilder();
-                                }
-                                devConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devConfig_);
-                                    devConfig_ = 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 ztp.Ztp.internal_static_ztp_DeviceRoleConfig_descriptor;
         }
@@ -1903,7 +1754,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public ztp.Ztp.DeviceRoleOrBuilder getDevRoleOrBuilder() {
-            return getDevRole();
+            return devRole_ == null ? ztp.Ztp.DeviceRole.getDefaultInstance() : devRole_;
         }
 
         public static final int DEVCONFIG_FIELD_NUMBER = 2;
@@ -1933,7 +1784,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public context.ContextOuterClass.DeviceConfigOrBuilder getDevConfigOrBuilder() {
-            return getDevConfig();
+            return devConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : devConfig_;
         }
 
         private byte memoizedIsInitialized = -1;
@@ -1957,7 +1808,7 @@ public final class Ztp {
             if (devConfig_ != null) {
                 output.writeMessage(2, getDevConfig());
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -1972,7 +1823,7 @@ public final class Ztp {
             if (devConfig_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDevConfig());
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -1998,7 +1849,7 @@ public final class Ztp {
                 if (!getDevConfig().equals(other.getDevConfig()))
                     return false;
             }
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2018,7 +1869,7 @@ public final class Ztp {
                 hash = (37 * hash) + DEVCONFIG_FIELD_NUMBER;
                 hash = (53 * hash) + getDevConfig().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2112,32 +1963,24 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceRoleConfig.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 (devRoleBuilder_ == null) {
-                    devRole_ = null;
-                } else {
-                    devRole_ = null;
+                bitField0_ = 0;
+                devRole_ = null;
+                if (devRoleBuilder_ != null) {
+                    devRoleBuilder_.dispose();
                     devRoleBuilder_ = null;
                 }
-                if (devConfigBuilder_ == null) {
-                    devConfig_ = null;
-                } else {
-                    devConfig_ = null;
+                devConfig_ = null;
+                if (devConfigBuilder_ != null) {
+                    devConfigBuilder_.dispose();
                     devConfigBuilder_ = null;
                 }
                 return this;
@@ -2165,48 +2008,21 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceRoleConfig buildPartial() {
                 ztp.Ztp.DeviceRoleConfig result = new ztp.Ztp.DeviceRoleConfig(this);
-                if (devRoleBuilder_ == null) {
-                    result.devRole_ = devRole_;
-                } else {
-                    result.devRole_ = devRoleBuilder_.build();
-                }
-                if (devConfigBuilder_ == null) {
-                    result.devConfig_ = devConfig_;
-                } else {
-                    result.devConfig_ = devConfigBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
                 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);
+            private void buildPartial0(ztp.Ztp.DeviceRoleConfig result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.devRole_ = devRoleBuilder_ == null ? devRole_ : devRoleBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.devConfig_ = devConfigBuilder_ == null ? devConfig_ : devConfigBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -2228,7 +2044,7 @@ public final class Ztp {
                 if (other.hasDevConfig()) {
                     mergeDevConfig(other.getDevConfig());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2240,20 +2056,54 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceRoleConfig parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDevRoleFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getDevConfigFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceRoleConfig) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private ztp.Ztp.DeviceRole devRole_;
 
             private com.google.protobuf.SingleFieldBuilderV3<ztp.Ztp.DeviceRole, ztp.Ztp.DeviceRole.Builder, ztp.Ztp.DeviceRoleOrBuilder> devRoleBuilder_;
@@ -2263,7 +2113,7 @@ public final class Ztp {
              * @return Whether the devRole field is set.
              */
             public boolean hasDevRole() {
-                return devRoleBuilder_ != null || devRole_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -2287,10 +2137,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devRole_ = value;
-                    onChanged();
                 } else {
                     devRoleBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -2300,10 +2151,11 @@ public final class Ztp {
             public Builder setDevRole(ztp.Ztp.DeviceRole.Builder builderForValue) {
                 if (devRoleBuilder_ == null) {
                     devRole_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devRoleBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -2312,15 +2164,16 @@ public final class Ztp {
              */
             public Builder mergeDevRole(ztp.Ztp.DeviceRole value) {
                 if (devRoleBuilder_ == null) {
-                    if (devRole_ != null) {
-                        devRole_ = ztp.Ztp.DeviceRole.newBuilder(devRole_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && devRole_ != null && devRole_ != ztp.Ztp.DeviceRole.getDefaultInstance()) {
+                        getDevRoleBuilder().mergeFrom(value);
                     } else {
                         devRole_ = value;
                     }
-                    onChanged();
                 } else {
                     devRoleBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -2328,13 +2181,13 @@ public final class Ztp {
              * <code>.ztp.DeviceRole devRole = 1;</code>
              */
             public Builder clearDevRole() {
-                if (devRoleBuilder_ == null) {
-                    devRole_ = null;
-                    onChanged();
-                } else {
-                    devRole_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                devRole_ = null;
+                if (devRoleBuilder_ != null) {
+                    devRoleBuilder_.dispose();
                     devRoleBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2342,6 +2195,7 @@ public final class Ztp {
              * <code>.ztp.DeviceRole devRole = 1;</code>
              */
             public ztp.Ztp.DeviceRole.Builder getDevRoleBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDevRoleFieldBuilder().getBuilder();
             }
@@ -2377,7 +2231,7 @@ public final class Ztp {
              * @return Whether the devConfig field is set.
              */
             public boolean hasDevConfig() {
-                return devConfigBuilder_ != null || devConfig_ != null;
+                return ((bitField0_ & 0x00000002) != 0);
             }
 
             /**
@@ -2401,10 +2255,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devConfig_ = value;
-                    onChanged();
                 } else {
                     devConfigBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -2414,10 +2269,11 @@ public final class Ztp {
             public Builder setDevConfig(context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
                 if (devConfigBuilder_ == null) {
                     devConfig_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devConfigBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -2426,15 +2282,16 @@ public final class Ztp {
              */
             public Builder mergeDevConfig(context.ContextOuterClass.DeviceConfig value) {
                 if (devConfigBuilder_ == null) {
-                    if (devConfig_ != null) {
-                        devConfig_ = context.ContextOuterClass.DeviceConfig.newBuilder(devConfig_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000002) != 0) && devConfig_ != null && devConfig_ != context.ContextOuterClass.DeviceConfig.getDefaultInstance()) {
+                        getDevConfigBuilder().mergeFrom(value);
                     } else {
                         devConfig_ = value;
                     }
-                    onChanged();
                 } else {
                     devConfigBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000002;
+                onChanged();
                 return this;
             }
 
@@ -2442,13 +2299,13 @@ public final class Ztp {
              * <code>.context.DeviceConfig devConfig = 2;</code>
              */
             public Builder clearDevConfig() {
-                if (devConfigBuilder_ == null) {
-                    devConfig_ = null;
-                    onChanged();
-                } else {
-                    devConfig_ = null;
+                bitField0_ = (bitField0_ & ~0x00000002);
+                devConfig_ = null;
+                if (devConfigBuilder_ != null) {
+                    devConfigBuilder_.dispose();
                     devConfigBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -2456,6 +2313,7 @@ public final class Ztp {
              * <code>.context.DeviceConfig devConfig = 2;</code>
              */
             public context.ContextOuterClass.DeviceConfig.Builder getDevConfigBuilder() {
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return getDevConfigFieldBuilder().getBuilder();
             }
@@ -2509,7 +2367,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceRoleConfig parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceRoleConfig(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -2580,57 +2448,6 @@ public final class Ztp {
             return new DeviceRoleList();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceRoleList(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)) {
-                                    devRole_ = new java.util.ArrayList<ztp.Ztp.DeviceRole>();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                devRole_.add(input.readMessage(ztp.Ztp.DeviceRole.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)) {
-                    devRole_ = java.util.Collections.unmodifiableList(devRole_);
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return ztp.Ztp.internal_static_ztp_DeviceRoleList_descriptor;
         }
@@ -2642,6 +2459,7 @@ public final class Ztp {
 
         public static final int DEVROLE_FIELD_NUMBER = 1;
 
+        @SuppressWarnings("serial")
         private java.util.List<ztp.Ztp.DeviceRole> devRole_;
 
         /**
@@ -2702,7 +2520,7 @@ public final class Ztp {
             for (int i = 0; i < devRole_.size(); i++) {
                 output.writeMessage(1, devRole_.get(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -2714,7 +2532,7 @@ public final class Ztp {
             for (int i = 0; i < devRole_.size(); i++) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, devRole_.get(i));
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -2730,7 +2548,7 @@ public final class Ztp {
             ztp.Ztp.DeviceRoleList other = (ztp.Ztp.DeviceRoleList) obj;
             if (!getDevRoleList().equals(other.getDevRoleList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -2746,7 +2564,7 @@ public final class Ztp {
                 hash = (37 * hash) + DEVROLE_FIELD_NUMBER;
                 hash = (53 * hash) + getDevRoleList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -2840,29 +2658,23 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceRoleList.newBuilder()
             private Builder() {
-                maybeForceBuilderInitialization();
             }
 
             private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
-                maybeForceBuilderInitialization();
-            }
-
-            private void maybeForceBuilderInitialization() {
-                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
-                    getDevRoleFieldBuilder();
-                }
             }
 
             @java.lang.Override
             public Builder clear() {
                 super.clear();
+                bitField0_ = 0;
                 if (devRoleBuilder_ == null) {
                     devRole_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00000001);
                 } else {
+                    devRole_ = null;
                     devRoleBuilder_.clear();
                 }
+                bitField0_ = (bitField0_ & ~0x00000001);
                 return this;
             }
 
@@ -2888,7 +2700,15 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceRoleList buildPartial() {
                 ztp.Ztp.DeviceRoleList result = new ztp.Ztp.DeviceRoleList(this);
-                int from_bitField0_ = bitField0_;
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(ztp.Ztp.DeviceRoleList result) {
                 if (devRoleBuilder_ == null) {
                     if (((bitField0_ & 0x00000001) != 0)) {
                         devRole_ = java.util.Collections.unmodifiableList(devRole_);
@@ -2898,38 +2718,10 @@ public final class Ztp {
                 } else {
                     result.devRole_ = devRoleBuilder_.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);
+            private void buildPartial0(ztp.Ztp.DeviceRoleList result) {
+                int from_bitField0_ = bitField0_;
             }
 
             @java.lang.Override
@@ -2969,7 +2761,7 @@ public final class Ztp {
                         }
                     }
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -2981,17 +2773,47 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceRoleList parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    ztp.Ztp.DeviceRole m = input.readMessage(ztp.Ztp.DeviceRole.parser(), extensionRegistry);
+                                    if (devRoleBuilder_ == null) {
+                                        ensureDevRoleIsMutable();
+                                        devRole_.add(m);
+                                    } else {
+                                        devRoleBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceRoleList) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
@@ -3261,7 +3083,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceRoleList parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceRoleList(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -3336,63 +3168,6 @@ public final class Ztp {
             return new DeviceRoleState();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceRoleState(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:
-                            {
-                                ztp.Ztp.DeviceRoleId.Builder subBuilder = null;
-                                if (devRoleId_ != null) {
-                                    subBuilder = devRoleId_.toBuilder();
-                                }
-                                devRoleId_ = input.readMessage(ztp.Ztp.DeviceRoleId.parser(), extensionRegistry);
-                                if (subBuilder != null) {
-                                    subBuilder.mergeFrom(devRoleId_);
-                                    devRoleId_ = subBuilder.buildPartial();
-                                }
-                                break;
-                            }
-                        case 16:
-                            {
-                                int rawValue = input.readEnum();
-                                devRoleState_ = 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 ztp.Ztp.internal_static_ztp_DeviceRoleState_descriptor;
         }
@@ -3429,12 +3204,12 @@ public final class Ztp {
          */
         @java.lang.Override
         public ztp.Ztp.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
-            return getDevRoleId();
+            return devRoleId_ == null ? ztp.Ztp.DeviceRoleId.getDefaultInstance() : devRoleId_;
         }
 
         public static final int DEVROLESTATE_FIELD_NUMBER = 2;
 
-        private int devRoleState_;
+        private int devRoleState_ = 0;
 
         /**
          * <code>.ztp.ZtpDeviceState devRoleState = 2;</code>
@@ -3451,8 +3226,7 @@ public final class Ztp {
          */
         @java.lang.Override
         public ztp.Ztp.ZtpDeviceState getDevRoleState() {
-            @SuppressWarnings("deprecation")
-            ztp.Ztp.ZtpDeviceState result = ztp.Ztp.ZtpDeviceState.valueOf(devRoleState_);
+            ztp.Ztp.ZtpDeviceState result = ztp.Ztp.ZtpDeviceState.forNumber(devRoleState_);
             return result == null ? ztp.Ztp.ZtpDeviceState.UNRECOGNIZED : result;
         }
 
@@ -3477,7 +3251,7 @@ public final class Ztp {
             if (devRoleState_ != ztp.Ztp.ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED.getNumber()) {
                 output.writeEnum(2, devRoleState_);
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -3492,7 +3266,7 @@ public final class Ztp {
             if (devRoleState_ != ztp.Ztp.ZtpDeviceState.ZTP_DEV_STATE_UNDEFINED.getNumber()) {
                 size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, devRoleState_);
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -3514,7 +3288,7 @@ public final class Ztp {
             }
             if (devRoleState_ != other.devRoleState_)
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -3532,7 +3306,7 @@ public final class Ztp {
             }
             hash = (37 * hash) + DEVROLESTATE_FIELD_NUMBER;
             hash = (53 * hash) + devRoleState_;
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -3626,26 +3400,19 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceRoleState.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 (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = 0;
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
                 devRoleState_ = 0;
@@ -3674,44 +3441,21 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceRoleState buildPartial() {
                 ztp.Ztp.DeviceRoleState result = new ztp.Ztp.DeviceRoleState(this);
-                if (devRoleIdBuilder_ == null) {
-                    result.devRoleId_ = devRoleId_;
-                } else {
-                    result.devRoleId_ = devRoleIdBuilder_.build();
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.devRoleState_ = devRoleState_;
                 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);
+            private void buildPartial0(ztp.Ztp.DeviceRoleState result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.devRoleId_ = devRoleIdBuilder_ == null ? devRoleId_ : devRoleIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.devRoleState_ = devRoleState_;
+                }
             }
 
             @java.lang.Override
@@ -3733,7 +3477,7 @@ public final class Ztp {
                 if (other.devRoleState_ != 0) {
                     setDevRoleStateValue(other.getDevRoleStateValue());
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -3745,20 +3489,54 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceRoleState parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getDevRoleIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 16:
+                                {
+                                    devRoleState_ = input.readEnum();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 16
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceRoleState) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
+            private int bitField0_;
+
             private ztp.Ztp.DeviceRoleId devRoleId_;
 
             private com.google.protobuf.SingleFieldBuilderV3<ztp.Ztp.DeviceRoleId, ztp.Ztp.DeviceRoleId.Builder, ztp.Ztp.DeviceRoleIdOrBuilder> devRoleIdBuilder_;
@@ -3768,7 +3546,7 @@ public final class Ztp {
              * @return Whether the devRoleId field is set.
              */
             public boolean hasDevRoleId() {
-                return devRoleIdBuilder_ != null || devRoleId_ != null;
+                return ((bitField0_ & 0x00000001) != 0);
             }
 
             /**
@@ -3792,10 +3570,11 @@ public final class Ztp {
                         throw new NullPointerException();
                     }
                     devRoleId_ = value;
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3805,10 +3584,11 @@ public final class Ztp {
             public Builder setDevRoleId(ztp.Ztp.DeviceRoleId.Builder builderForValue) {
                 if (devRoleIdBuilder_ == null) {
                     devRoleId_ = builderForValue.build();
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.setMessage(builderForValue.build());
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3817,15 +3597,16 @@ public final class Ztp {
              */
             public Builder mergeDevRoleId(ztp.Ztp.DeviceRoleId value) {
                 if (devRoleIdBuilder_ == null) {
-                    if (devRoleId_ != null) {
-                        devRoleId_ = ztp.Ztp.DeviceRoleId.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+                    if (((bitField0_ & 0x00000001) != 0) && devRoleId_ != null && devRoleId_ != ztp.Ztp.DeviceRoleId.getDefaultInstance()) {
+                        getDevRoleIdBuilder().mergeFrom(value);
                     } else {
                         devRoleId_ = value;
                     }
-                    onChanged();
                 } else {
                     devRoleIdBuilder_.mergeFrom(value);
                 }
+                bitField0_ |= 0x00000001;
+                onChanged();
                 return this;
             }
 
@@ -3833,13 +3614,13 @@ public final class Ztp {
              * <code>.ztp.DeviceRoleId devRoleId = 1;</code>
              */
             public Builder clearDevRoleId() {
-                if (devRoleIdBuilder_ == null) {
-                    devRoleId_ = null;
-                    onChanged();
-                } else {
-                    devRoleId_ = null;
+                bitField0_ = (bitField0_ & ~0x00000001);
+                devRoleId_ = null;
+                if (devRoleIdBuilder_ != null) {
+                    devRoleIdBuilder_.dispose();
                     devRoleIdBuilder_ = null;
                 }
+                onChanged();
                 return this;
             }
 
@@ -3847,6 +3628,7 @@ public final class Ztp {
              * <code>.ztp.DeviceRoleId devRoleId = 1;</code>
              */
             public ztp.Ztp.DeviceRoleId.Builder getDevRoleIdBuilder() {
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return getDevRoleIdFieldBuilder().getBuilder();
             }
@@ -3891,6 +3673,7 @@ public final class Ztp {
              */
             public Builder setDevRoleStateValue(int value) {
                 devRoleState_ = value;
+                bitField0_ |= 0x00000002;
                 onChanged();
                 return this;
             }
@@ -3901,8 +3684,7 @@ public final class Ztp {
              */
             @java.lang.Override
             public ztp.Ztp.ZtpDeviceState getDevRoleState() {
-                @SuppressWarnings("deprecation")
-                ztp.Ztp.ZtpDeviceState result = ztp.Ztp.ZtpDeviceState.valueOf(devRoleState_);
+                ztp.Ztp.ZtpDeviceState result = ztp.Ztp.ZtpDeviceState.forNumber(devRoleState_);
                 return result == null ? ztp.Ztp.ZtpDeviceState.UNRECOGNIZED : result;
             }
 
@@ -3915,6 +3697,7 @@ public final class Ztp {
                 if (value == null) {
                     throw new NullPointerException();
                 }
+                bitField0_ |= 0x00000002;
                 devRoleState_ = value.getNumber();
                 onChanged();
                 return this;
@@ -3925,6 +3708,7 @@ public final class Ztp {
              * @return This builder for chaining.
              */
             public Builder clearDevRoleState() {
+                bitField0_ = (bitField0_ & ~0x00000002);
                 devRoleState_ = 0;
                 onChanged();
                 return this;
@@ -3957,7 +3741,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceRoleState parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceRoleState(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
@@ -4020,7 +3814,7 @@ public final class Ztp {
         }
 
         private DeviceDeletionResult() {
-            deleted_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+            deleted_ = com.google.protobuf.LazyStringArrayList.emptyList();
         }
 
         @java.lang.Override
@@ -4029,58 +3823,6 @@ public final class Ztp {
             return new DeviceDeletionResult();
         }
 
-        @java.lang.Override
-        public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-            return this.unknownFields;
-        }
-
-        private DeviceDeletionResult(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:
-                            {
-                                java.lang.String s = input.readStringRequireUtf8();
-                                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                                    deleted_ = new com.google.protobuf.LazyStringArrayList();
-                                    mutable_bitField0_ |= 0x00000001;
-                                }
-                                deleted_.add(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 {
-                if (((mutable_bitField0_ & 0x00000001) != 0)) {
-                    deleted_ = deleted_.getUnmodifiableView();
-                }
-                this.unknownFields = unknownFields.build();
-                makeExtensionsImmutable();
-            }
-        }
-
         public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
             return ztp.Ztp.internal_static_ztp_DeviceDeletionResult_descriptor;
         }
@@ -4092,7 +3834,8 @@ public final class Ztp {
 
         public static final int DELETED_FIELD_NUMBER = 1;
 
-        private com.google.protobuf.LazyStringList deleted_;
+        @SuppressWarnings("serial")
+        private com.google.protobuf.LazyStringArrayList deleted_ = com.google.protobuf.LazyStringArrayList.emptyList();
 
         /**
          * <code>repeated string deleted = 1;</code>
@@ -4146,7 +3889,7 @@ public final class Ztp {
             for (int i = 0; i < deleted_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, deleted_.getRaw(i));
             }
-            unknownFields.writeTo(output);
+            getUnknownFields().writeTo(output);
         }
 
         @java.lang.Override
@@ -4163,7 +3906,7 @@ public final class Ztp {
                 size += dataSize;
                 size += 1 * getDeletedList().size();
             }
-            size += unknownFields.getSerializedSize();
+            size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
         }
@@ -4179,7 +3922,7 @@ public final class Ztp {
             ztp.Ztp.DeviceDeletionResult other = (ztp.Ztp.DeviceDeletionResult) obj;
             if (!getDeletedList().equals(other.getDeletedList()))
                 return false;
-            if (!unknownFields.equals(other.unknownFields))
+            if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
         }
@@ -4195,7 +3938,7 @@ public final class Ztp {
                 hash = (37 * hash) + DELETED_FIELD_NUMBER;
                 hash = (53 * hash) + getDeletedList().hashCode();
             }
-            hash = (29 * hash) + unknownFields.hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
         }
@@ -4289,24 +4032,17 @@ public final class Ztp {
 
             // Construct using ztp.Ztp.DeviceDeletionResult.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();
-                deleted_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-                bitField0_ = (bitField0_ & ~0x00000001);
+                bitField0_ = 0;
+                deleted_ = com.google.protobuf.LazyStringArrayList.emptyList();
                 return this;
             }
 
@@ -4332,44 +4068,19 @@ public final class Ztp {
             @java.lang.Override
             public ztp.Ztp.DeviceDeletionResult buildPartial() {
                 ztp.Ztp.DeviceDeletionResult result = new ztp.Ztp.DeviceDeletionResult(this);
-                int from_bitField0_ = bitField0_;
-                if (((bitField0_ & 0x00000001) != 0)) {
-                    deleted_ = deleted_.getUnmodifiableView();
-                    bitField0_ = (bitField0_ & ~0x00000001);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
                 }
-                result.deleted_ = deleted_;
                 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);
+            private void buildPartial0(ztp.Ztp.DeviceDeletionResult result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    deleted_.makeImmutable();
+                    result.deleted_ = deleted_;
+                }
             }
 
             @java.lang.Override
@@ -4388,14 +4099,14 @@ public final class Ztp {
                 if (!other.deleted_.isEmpty()) {
                     if (deleted_.isEmpty()) {
                         deleted_ = other.deleted_;
-                        bitField0_ = (bitField0_ & ~0x00000001);
+                        bitField0_ |= 0x00000001;
                     } else {
                         ensureDeletedIsMutable();
                         deleted_.addAll(other.deleted_);
                     }
                     onChanged();
                 }
-                this.mergeUnknownFields(other.unknownFields);
+                this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
             }
@@ -4407,29 +4118,55 @@ public final class Ztp {
 
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
-                ztp.Ztp.DeviceDeletionResult parsedMessage = null;
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
                 try {
-                    parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    ensureDeletedIsMutable();
+                                    deleted_.add(s);
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
                 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-                    parsedMessage = (ztp.Ztp.DeviceDeletionResult) e.getUnfinishedMessage();
                     throw e.unwrapIOException();
                 } finally {
-                    if (parsedMessage != null) {
-                        mergeFrom(parsedMessage);
-                    }
+                    onChanged();
                 }
+                // finally
                 return this;
             }
 
             private int bitField0_;
 
-            private com.google.protobuf.LazyStringList deleted_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+            private com.google.protobuf.LazyStringArrayList deleted_ = com.google.protobuf.LazyStringArrayList.emptyList();
 
             private void ensureDeletedIsMutable() {
-                if (!((bitField0_ & 0x00000001) != 0)) {
+                if (!deleted_.isModifiable()) {
                     deleted_ = new com.google.protobuf.LazyStringArrayList(deleted_);
-                    bitField0_ |= 0x00000001;
                 }
+                bitField0_ |= 0x00000001;
             }
 
             /**
@@ -4437,7 +4174,8 @@ public final class Ztp {
              * @return A list containing the deleted.
              */
             public com.google.protobuf.ProtocolStringList getDeletedList() {
-                return deleted_.getUnmodifiableView();
+                deleted_.makeImmutable();
+                return deleted_;
             }
 
             /**
@@ -4478,6 +4216,7 @@ public final class Ztp {
                 }
                 ensureDeletedIsMutable();
                 deleted_.set(index, value);
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -4493,6 +4232,7 @@ public final class Ztp {
                 }
                 ensureDeletedIsMutable();
                 deleted_.add(value);
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -4505,6 +4245,7 @@ public final class Ztp {
             public Builder addAllDeleted(java.lang.Iterable<java.lang.String> values) {
                 ensureDeletedIsMutable();
                 com.google.protobuf.AbstractMessageLite.Builder.addAll(values, deleted_);
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -4514,8 +4255,9 @@ public final class Ztp {
              * @return This builder for chaining.
              */
             public Builder clearDeleted() {
-                deleted_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+                deleted_ = com.google.protobuf.LazyStringArrayList.emptyList();
                 bitField0_ = (bitField0_ & ~0x00000001);
+                ;
                 onChanged();
                 return this;
             }
@@ -4532,6 +4274,7 @@ public final class Ztp {
                 checkByteStringIsUtf8(value);
                 ensureDeletedIsMutable();
                 deleted_.add(value);
+                bitField0_ |= 0x00000001;
                 onChanged();
                 return this;
             }
@@ -4563,7 +4306,17 @@ public final class Ztp {
 
             @java.lang.Override
             public DeviceDeletionResult parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
-                return new DeviceDeletionResult(input, extensionRegistry);
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
             }
         };
 
diff --git a/src/ztp/target/generated-sources/grpc/ztp/ZtpServiceGrpc.java b/src/ztp/target/generated-sources/grpc/ztp/ZtpServiceGrpc.java
index 796e4bcee7c43597555f826e21f430bc4c324706..e989a3637bf261c9c5557f048f173a1a3a225f21 100644
--- a/src/ztp/target/generated-sources/grpc/ztp/ZtpServiceGrpc.java
+++ b/src/ztp/target/generated-sources/grpc/ztp/ZtpServiceGrpc.java
@@ -4,7 +4,8 @@ import static io.grpc.MethodDescriptor.generateFullMethodName;
 
 /**
  */
-@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.38.1)", comments = "Source: ztp.proto")
+@io.quarkus.grpc.common.Generated(value = "by gRPC proto compiler (version 1.55.1)", comments = "Source: ztp.proto")
+@io.grpc.stub.annotations.GrpcGenerated
 public final class ZtpServiceGrpc {
 
     private ZtpServiceGrpc() {
@@ -147,51 +148,58 @@ public final class ZtpServiceGrpc {
 
     /**
      */
-    public static abstract class ZtpServiceImplBase implements io.grpc.BindableService {
+    public interface AsyncService {
 
         /**
          */
-        public void ztpGetDeviceRole(ztp.Ztp.DeviceRoleId request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRole> responseObserver) {
+        default void ztpGetDeviceRole(ztp.Ztp.DeviceRoleId request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRole> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpGetDeviceRoleMethod(), responseObserver);
         }
 
         /**
          */
-        public void ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleList> responseObserver) {
+        default void ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleList> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpGetDeviceRolesByDeviceIdMethod(), responseObserver);
         }
 
         /**
          */
-        public void ztpAdd(ztp.Ztp.DeviceRole request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
+        default void ztpAdd(ztp.Ztp.DeviceRole request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpAddMethod(), responseObserver);
         }
 
         /**
          */
-        public void ztpUpdate(ztp.Ztp.DeviceRoleConfig request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
+        default void ztpUpdate(ztp.Ztp.DeviceRoleConfig request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpUpdateMethod(), responseObserver);
         }
 
         /**
          */
-        public void ztpDelete(ztp.Ztp.DeviceRole request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
+        default void ztpDelete(ztp.Ztp.DeviceRole request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceRoleState> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpDeleteMethod(), responseObserver);
         }
 
         /**
          */
-        public void ztpDeleteAll(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceDeletionResult> responseObserver) {
+        default void ztpDeleteAll(context.ContextOuterClass.Empty request, io.grpc.stub.StreamObserver<ztp.Ztp.DeviceDeletionResult> responseObserver) {
             io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpDeleteAllMethod(), responseObserver);
         }
+    }
+
+    /**
+     * Base class for the server implementation of the service ZtpService.
+     */
+    public static abstract class ZtpServiceImplBase implements io.grpc.BindableService, AsyncService {
 
         @java.lang.Override
         public io.grpc.ServerServiceDefinition bindService() {
-            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getZtpGetDeviceRoleMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRoleId, ztp.Ztp.DeviceRole>(this, METHODID_ZTP_GET_DEVICE_ROLE))).addMethod(getZtpGetDeviceRolesByDeviceIdMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, ztp.Ztp.DeviceRoleList>(this, METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID))).addMethod(getZtpAddMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRole, ztp.Ztp.DeviceRoleState>(this, METHODID_ZTP_ADD))).addMethod(getZtpUpdateMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRoleConfig, ztp.Ztp.DeviceRoleState>(this, METHODID_ZTP_UPDATE))).addMethod(getZtpDeleteMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRole, ztp.Ztp.DeviceRoleState>(this, METHODID_ZTP_DELETE))).addMethod(getZtpDeleteAllMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, ztp.Ztp.DeviceDeletionResult>(this, METHODID_ZTP_DELETE_ALL))).build();
+            return ZtpServiceGrpc.bindService(this);
         }
     }
 
     /**
+     * A stub to allow clients to do asynchronous rpc calls to service ZtpService.
      */
     public static class ZtpServiceStub extends io.grpc.stub.AbstractAsyncStub<ZtpServiceStub> {
 
@@ -242,6 +250,7 @@ public final class ZtpServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do synchronous rpc calls to service ZtpService.
      */
     public static class ZtpServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ZtpServiceBlockingStub> {
 
@@ -292,6 +301,7 @@ public final class ZtpServiceGrpc {
     }
 
     /**
+     * A stub to allow clients to do ListenableFuture-style rpc calls to service ZtpService.
      */
     public static class ZtpServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ZtpServiceFutureStub> {
 
@@ -355,11 +365,11 @@ public final class ZtpServiceGrpc {
 
     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 ZtpServiceImplBase serviceImpl;
+        private final AsyncService serviceImpl;
 
         private final int methodId;
 
-        MethodHandlers(ZtpServiceImplBase serviceImpl, int methodId) {
+        MethodHandlers(AsyncService serviceImpl, int methodId) {
             this.serviceImpl = serviceImpl;
             this.methodId = methodId;
         }
@@ -401,6 +411,10 @@ public final class ZtpServiceGrpc {
         }
     }
 
+    public static io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+        return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()).addMethod(getZtpGetDeviceRoleMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRoleId, ztp.Ztp.DeviceRole>(service, METHODID_ZTP_GET_DEVICE_ROLE))).addMethod(getZtpGetDeviceRolesByDeviceIdMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.DeviceId, ztp.Ztp.DeviceRoleList>(service, METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID))).addMethod(getZtpAddMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRole, ztp.Ztp.DeviceRoleState>(service, METHODID_ZTP_ADD))).addMethod(getZtpUpdateMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRoleConfig, ztp.Ztp.DeviceRoleState>(service, METHODID_ZTP_UPDATE))).addMethod(getZtpDeleteMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<ztp.Ztp.DeviceRole, ztp.Ztp.DeviceRoleState>(service, METHODID_ZTP_DELETE))).addMethod(getZtpDeleteAllMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall(new MethodHandlers<context.ContextOuterClass.Empty, ztp.Ztp.DeviceDeletionResult>(service, METHODID_ZTP_DELETE_ALL))).build();
+    }
+
     private static abstract class ZtpServiceBaseDescriptorSupplier implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
 
         ZtpServiceBaseDescriptorSupplier() {
diff --git a/tfs.json b/tfs.json
new file mode 100644
index 0000000000000000000000000000000000000000..32a68acb1fb9478c641affa391c45dc2b14e2db7
--- /dev/null
+++ b/tfs.json
@@ -0,0 +1,59 @@
+{
+    "apiVersion": "v1",
+    "kind": "Namespace",
+    "metadata": {
+        "creationTimestamp": "2024-12-20T10:19:11Z",
+        "deletionTimestamp": "2024-12-20T10:48:23Z",
+        "labels": {
+            "kubernetes.io/metadata.name": "tfs"
+        },
+        "name": "tfs",
+        "resourceVersion": "71006899",
+        "uid": "d76377f3-1b5f-4f96-bef9-59924490582b"
+    },
+    "spec": {
+        "finalizers": [
+
+        ]
+    },
+    "status": {
+        "conditions": [
+            {
+                "lastTransitionTime": "2024-12-20T10:48:28Z",
+                "message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: tap.linkerd.io/v1alpha1: the server is currently unable to handle the request",
+                "reason": "DiscoveryFailed",
+                "status": "True",
+                "type": "NamespaceDeletionDiscoveryFailure"
+            },
+            {
+                "lastTransitionTime": "2024-12-20T10:48:31Z",
+                "message": "All legacy kube types successfully parsed",
+                "reason": "ParsedGroupVersions",
+                "status": "False",
+                "type": "NamespaceDeletionGroupVersionParsingFailure"
+            },
+            {
+                "lastTransitionTime": "2024-12-20T10:48:38Z",
+                "message": "All content successfully deleted, may be waiting on finalization",
+                "reason": "ContentDeleted",
+                "status": "False",
+                "type": "NamespaceDeletionContentFailure"
+            },
+            {
+                "lastTransitionTime": "2024-12-20T10:48:38Z",
+                "message": "All content successfully removed",
+                "reason": "ContentRemoved",
+                "status": "False",
+                "type": "NamespaceContentRemaining"
+            },
+            {
+                "lastTransitionTime": "2024-12-20T10:48:31Z",
+                "message": "All content-preserving finalizers finished",
+                "reason": "ContentHasNoFinalizers",
+                "status": "False",
+                "type": "NamespaceFinalizersRemaining"
+            }
+        ],
+        "phase": "Terminating"
+    }
+}