diff --git a/proto/policy-action.proto b/proto/policy-action.proto
new file mode 100644
index 0000000000000000000000000000000000000000..374b5975129353219902e270a521496e914b1625
--- /dev/null
+++ b/proto/policy-action.proto
@@ -0,0 +1,29 @@
+// Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+//
+// 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.
+
+syntax = "proto3";
+package policy;
+
+// Action
+message PolicyRuleAction {
+  PolicyRuleActionEnum action = 1;
+  repeated string parameters = 2;
+}
+
+enum PolicyRuleActionEnum {
+  POLICYRULE_ACTION_NO_ACTION = 0;
+  POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;
+  POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;
+  POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;
+}
diff --git a/proto/policy-condition.proto b/proto/policy-condition.proto
index 747eead852d7c1cdf33d85517b870b1e615527fd..7cd6576678872df07a2da6a3706349f004b3a8a1 100644
--- a/proto/policy-condition.proto
+++ b/proto/policy-condition.proto
@@ -20,22 +20,24 @@ import "monitoring.proto";
 // Condition
 message PolicyRuleCondition {
   monitoring.KpiId kpiId = 1;
-  PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;
+  NumericalOperator numericalOperator = 2;
   monitoring.KpiValue kpiValue = 3;
 }
 
 // Operator to be used when comparing Kpis with condition values
-enum PolicyRuleConditionComparisonOperator {
-  EQUAL = 0;              // Kpi is equal with value
-  NOT_EQUAL = 1;          // Kpi is not equal with value
-  LESS_THAN = 2;          // Kpi is less than value
-  LESS_THAN_EQUAL = 3;    // Kpi is less than or equal with value
-  GREATER_THAN = 4;       // Kpi is greater than value
-  GREATER_THAN_EQUAL = 5; // Kpi is less than or equal with value
+enum NumericalOperator {
+  POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;          // Kpi numerical operator undefined
+  POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;              // Kpi is equal with value
+  POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;          // Kpi is not equal with value
+  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;          // Kpi is less than value
+  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;    // Kpi is less than or equal with value
+  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;       // Kpi is greater than value
+  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6; // Kpi is less than or equal with value
 }
 
 // Operator to be used when evaluating each condition
-enum PolicyRuleConditionEvaluationOperator {
-  AND = 0;  // Logical AND operator
-  OR = 1;   // Logical OR operator
+enum BooleanOperator {
+  POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;  // Boolean operator undefined
+  POLICYRULE_CONDITION_BOOLEAN_AND = 1;        // Boolean AND operator
+  POLICYRULE_CONDITION_BOOLEAN_OR = 2;         // Boolean OR operator
 }
\ No newline at end of file
diff --git a/proto/policy.proto b/proto/policy.proto
index 447eda2e19188a39a1980181d3018a25ed9f83c7..0887ae955edb544616d711189db0133fa788c104 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -16,6 +16,8 @@ syntax = "proto3";
 package policy;
 
 import "context.proto";
+import "policy-condition.proto";
+import "policy-action.proto";
 
 service PolicyService {
   rpc PolicyAdd (PolicyRule) returns (PolicyRuleState) {}
@@ -46,14 +48,6 @@ message PolicyRuleState {
   RuleState policyRuleState = 2;
 }
 
-message PolicyRuleVariable {
-  string policyRuleVariable = 1;
-}
-
-message PolicyRuleValue {
-  string policyRuleValue = 1;
-}
-
 // IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
 //     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
 // Event
@@ -61,18 +55,6 @@ message PolicyRuleEvent {
   context.Event event = 1;
 }
 
-// Condition
-message PolicyRuleCondition {
-  PolicyRuleVariable polRuleConditionVar = 1;
-  PolicyRuleValue polRuleConditionVal = 2;
-}
-
-// Action
-message PolicyRuleAction {
-  PolicyRuleVariable polRuleActionVar = 1;
-  PolicyRuleValue polRuleActionVal = 2;
-}
-
 // Policy rule partially complies with IETF’s:
 //     RFC 3060: https://datatracker.ietf.org/doc/html/rfc3060
 //     RFC 3460: https://datatracker.ietf.org/doc/html/rfc3460
@@ -81,16 +63,17 @@ message PolicyRule {
   // Basic policy rule attributes
   PolicyRuleId policyRuleId = 1;
   PolicyRuleType policyRuleType = 2;
-  uint32 PolicyRulePriority = 3;
+  uint32 priority = 3;
 
   // Event-Condition-Action model
-  PolicyRuleEvent event = 4;                             // A single event triggers the policy
-  repeated PolicyRuleCondition polRuleConditionList = 5; // One or more conditions must be met
-  repeated PolicyRuleAction polRuleActionList = 6;       // One or more actions should be applied
-
-  // Affected services and devices
-  repeated context.ServiceId serviceList = 7;
-  repeated context.DeviceId deviceList = 8;
+  PolicyRuleEvent event = 4;                         // A single event triggers the policy
+  repeated PolicyRuleCondition conditionList = 5;    // One or more conditions must be met
+  BooleanOperator booleanOperator = 6;               // Evaluation operator to be used
+  repeated PolicyRuleAction actionList = 7;          // One or more actions should be applied
+
+  // Affected service and devices
+  context.ServiceId serviceId = 8;
+  repeated context.DeviceId deviceList = 9;
 }
 
 // A list of policy rules
diff --git a/src/policy/src/main/proto/policy-action.proto b/src/policy/src/main/proto/policy-action.proto
new file mode 120000
index 0000000000000000000000000000000000000000..bb1531bd6607ff005fdaae9d0be27ee65e3515ca
--- /dev/null
+++ b/src/policy/src/main/proto/policy-action.proto
@@ -0,0 +1 @@
+../../../../../proto/policy-action.proto
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index 8386be80944cbbbe49d8485a1abff74fdc112d30..78734473960668d0c7792df03104b91b5fabdbcb 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -1628,2665 +1628,51 @@ public final class Policy {
 
   }
 
-  public interface PolicyRuleVariableOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleVariable)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The policyRuleVariable.
-     */
-    java.lang.String getPolicyRuleVariable();
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The bytes for policyRuleVariable.
-     */
-    com.google.protobuf.ByteString
-        getPolicyRuleVariableBytes();
-  }
-  /**
-   * Protobuf type {@code policy.PolicyRuleVariable}
-   */
-  public static final class PolicyRuleVariable extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleVariable)
-      PolicyRuleVariableOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleVariable.newBuilder() to construct.
-    private PolicyRuleVariable(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleVariable() {
-      policyRuleVariable_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleVariable();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleVariable(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              policyRuleVariable_ = s;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
-    }
-
-    public static final int POLICYRULEVARIABLE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object policyRuleVariable_;
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The policyRuleVariable.
-     */
-    @java.lang.Override
-    public java.lang.String getPolicyRuleVariable() {
-      java.lang.Object ref = policyRuleVariable_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        policyRuleVariable_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The bytes for policyRuleVariable.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getPolicyRuleVariableBytes() {
-      java.lang.Object ref = policyRuleVariable_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        policyRuleVariable_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getPolicyRuleVariableBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleVariable_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!getPolicyRuleVariableBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleVariable_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof policy.Policy.PolicyRuleVariable)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleVariable other = (policy.Policy.PolicyRuleVariable) obj;
-
-      if (!getPolicyRuleVariable()
-          .equals(other.getPolicyRuleVariable())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + POLICYRULEVARIABLE_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRuleVariable().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(policy.Policy.PolicyRuleVariable prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code policy.PolicyRuleVariable}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleVariable)
-        policy.Policy.PolicyRuleVariableOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleVariable.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        policyRuleVariable_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleVariable.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable build() {
-        policy.Policy.PolicyRuleVariable result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable buildPartial() {
-        policy.Policy.PolicyRuleVariable result = new policy.Policy.PolicyRuleVariable(this);
-        result.policyRuleVariable_ = policyRuleVariable_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleVariable) {
-          return mergeFrom((policy.Policy.PolicyRuleVariable)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleVariable other) {
-        if (other == policy.Policy.PolicyRuleVariable.getDefaultInstance()) return this;
-        if (!other.getPolicyRuleVariable().isEmpty()) {
-          policyRuleVariable_ = other.policyRuleVariable_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        policy.Policy.PolicyRuleVariable parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleVariable) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object policyRuleVariable_ = "";
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return The policyRuleVariable.
-       */
-      public java.lang.String getPolicyRuleVariable() {
-        java.lang.Object ref = policyRuleVariable_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          policyRuleVariable_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return The bytes for policyRuleVariable.
-       */
-      public com.google.protobuf.ByteString
-          getPolicyRuleVariableBytes() {
-        java.lang.Object ref = policyRuleVariable_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          policyRuleVariable_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @param value The policyRuleVariable to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleVariable(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        policyRuleVariable_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearPolicyRuleVariable() {
-        
-        policyRuleVariable_ = getDefaultInstance().getPolicyRuleVariable();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @param value The bytes for policyRuleVariable to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleVariableBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        policyRuleVariable_ = value;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleVariable)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleVariable)
-    private static final policy.Policy.PolicyRuleVariable DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleVariable();
-    }
-
-    public static policy.Policy.PolicyRuleVariable getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleVariable>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleVariable>() {
-      @java.lang.Override
-      public PolicyRuleVariable parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleVariable(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleVariable> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleVariable> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleValue)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The policyRuleValue.
-     */
-    java.lang.String getPolicyRuleValue();
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The bytes for policyRuleValue.
-     */
-    com.google.protobuf.ByteString
-        getPolicyRuleValueBytes();
-  }
-  /**
-   * Protobuf type {@code policy.PolicyRuleValue}
-   */
-  public static final class PolicyRuleValue extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleValue)
-      PolicyRuleValueOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleValue.newBuilder() to construct.
-    private PolicyRuleValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleValue() {
-      policyRuleValue_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleValue();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleValue(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              policyRuleValue_ = s;
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
-    }
-
-    public static final int POLICYRULEVALUE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object policyRuleValue_;
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The policyRuleValue.
-     */
-    @java.lang.Override
-    public java.lang.String getPolicyRuleValue() {
-      java.lang.Object ref = policyRuleValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        policyRuleValue_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The bytes for policyRuleValue.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getPolicyRuleValueBytes() {
-      java.lang.Object ref = policyRuleValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        policyRuleValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getPolicyRuleValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleValue_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!getPolicyRuleValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleValue_);
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof policy.Policy.PolicyRuleValue)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleValue other = (policy.Policy.PolicyRuleValue) obj;
-
-      if (!getPolicyRuleValue()
-          .equals(other.getPolicyRuleValue())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + POLICYRULEVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRuleValue().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(policy.Policy.PolicyRuleValue prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code policy.PolicyRuleValue}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleValue)
-        policy.Policy.PolicyRuleValueOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleValue.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        policyRuleValue_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleValue.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue build() {
-        policy.Policy.PolicyRuleValue result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue buildPartial() {
-        policy.Policy.PolicyRuleValue result = new policy.Policy.PolicyRuleValue(this);
-        result.policyRuleValue_ = policyRuleValue_;
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleValue) {
-          return mergeFrom((policy.Policy.PolicyRuleValue)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleValue other) {
-        if (other == policy.Policy.PolicyRuleValue.getDefaultInstance()) return this;
-        if (!other.getPolicyRuleValue().isEmpty()) {
-          policyRuleValue_ = other.policyRuleValue_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        policy.Policy.PolicyRuleValue parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleValue) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object policyRuleValue_ = "";
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return The policyRuleValue.
-       */
-      public java.lang.String getPolicyRuleValue() {
-        java.lang.Object ref = policyRuleValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          policyRuleValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return The bytes for policyRuleValue.
-       */
-      public com.google.protobuf.ByteString
-          getPolicyRuleValueBytes() {
-        java.lang.Object ref = policyRuleValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          policyRuleValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @param value The policyRuleValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        policyRuleValue_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearPolicyRuleValue() {
-        
-        policyRuleValue_ = getDefaultInstance().getPolicyRuleValue();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @param value The bytes for policyRuleValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        policyRuleValue_ = value;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleValue)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleValue)
-    private static final policy.Policy.PolicyRuleValue DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleValue();
-    }
-
-    public static policy.Policy.PolicyRuleValue getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleValue>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleValue>() {
-      @java.lang.Override
-      public PolicyRuleValue parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleValue(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleValue> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleValue> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleEvent)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    context.ContextOuterClass.Event getEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-  }
-  /**
-   * <pre>
-   * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
-   *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
-   * Event
-   * </pre>
-   *
-   * Protobuf type {@code policy.PolicyRuleEvent}
-   */
-  public static final class PolicyRuleEvent extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleEvent)
-      PolicyRuleEventOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleEvent.newBuilder() to construct.
-    private PolicyRuleEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleEvent() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleEvent();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleEvent(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
-    }
-
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof policy.Policy.PolicyRuleEvent)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleEvent other = (policy.Policy.PolicyRuleEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(policy.Policy.PolicyRuleEvent prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * <pre>
-     * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
-     *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
-     * Event
-     * </pre>
-     *
-     * Protobuf type {@code policy.PolicyRuleEvent}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleEvent)
-        policy.Policy.PolicyRuleEventOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleEvent.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleEvent.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent build() {
-        policy.Policy.PolicyRuleEvent result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent buildPartial() {
-        policy.Policy.PolicyRuleEvent result = new policy.Policy.PolicyRuleEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleEvent) {
-          return mergeFrom((policy.Policy.PolicyRuleEvent)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleEvent other) {
-        if (other == policy.Policy.PolicyRuleEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        policy.Policy.PolicyRuleEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleEvent) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
-      /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
-       */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
-       */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-        } else {
-          return eventBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          event_ = value;
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
-          }
-          onChanged();
-        } else {
-          eventBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
-          onChanged();
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
-        } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
-        }
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
-        }
-        return eventBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleEvent)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleEvent)
-    private static final policy.Policy.PolicyRuleEvent DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleEvent();
-    }
-
-    public static policy.Policy.PolicyRuleEvent getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleEvent>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleEvent>() {
-      @java.lang.Override
-      public PolicyRuleEvent parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleEvent(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleEvent> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleEvent> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleConditionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleCondition)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return Whether the polRuleConditionVar field is set.
-     */
-    boolean hasPolRuleConditionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return The polRuleConditionVar.
-     */
-    policy.Policy.PolicyRuleVariable getPolRuleConditionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     */
-    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder();
-
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return Whether the polRuleConditionVal field is set.
-     */
-    boolean hasPolRuleConditionVal();
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return The polRuleConditionVal.
-     */
-    policy.Policy.PolicyRuleValue getPolRuleConditionVal();
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     */
-    policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder();
-  }
-  /**
-   * <pre>
-   * Condition
-   * </pre>
-   *
-   * Protobuf type {@code policy.PolicyRuleCondition}
-   */
-  public static final class PolicyRuleCondition extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleCondition)
-      PolicyRuleConditionOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleCondition.newBuilder() to construct.
-    private PolicyRuleCondition(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleCondition() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleCondition();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleCondition(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
-              if (polRuleConditionVar_ != null) {
-                subBuilder = polRuleConditionVar_.toBuilder();
-              }
-              polRuleConditionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleConditionVar_);
-                polRuleConditionVar_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
-              if (polRuleConditionVal_ != null) {
-                subBuilder = polRuleConditionVal_.toBuilder();
-              }
-              polRuleConditionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleConditionVal_);
-                polRuleConditionVal_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
-    }
-
-    public static final int POLRULECONDITIONVAR_FIELD_NUMBER = 1;
-    private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return Whether the polRuleConditionVar field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleConditionVar() {
-      return polRuleConditionVar_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return The polRuleConditionVar.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
-      return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
-      return getPolRuleConditionVar();
-    }
-
-    public static final int POLRULECONDITIONVAL_FIELD_NUMBER = 2;
-    private policy.Policy.PolicyRuleValue polRuleConditionVal_;
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return Whether the polRuleConditionVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleConditionVal() {
-      return polRuleConditionVal_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return The polRuleConditionVal.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
-      return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-    }
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
-      return getPolRuleConditionVal();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (polRuleConditionVar_ != null) {
-        output.writeMessage(1, getPolRuleConditionVar());
-      }
-      if (polRuleConditionVal_ != null) {
-        output.writeMessage(2, getPolRuleConditionVal());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (polRuleConditionVar_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getPolRuleConditionVar());
-      }
-      if (polRuleConditionVal_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getPolRuleConditionVal());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof policy.Policy.PolicyRuleCondition)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleCondition other = (policy.Policy.PolicyRuleCondition) obj;
-
-      if (hasPolRuleConditionVar() != other.hasPolRuleConditionVar()) return false;
-      if (hasPolRuleConditionVar()) {
-        if (!getPolRuleConditionVar()
-            .equals(other.getPolRuleConditionVar())) return false;
-      }
-      if (hasPolRuleConditionVal() != other.hasPolRuleConditionVal()) return false;
-      if (hasPolRuleConditionVal()) {
-        if (!getPolRuleConditionVal()
-            .equals(other.getPolRuleConditionVal())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasPolRuleConditionVar()) {
-        hash = (37 * hash) + POLRULECONDITIONVAR_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionVar().hashCode();
-      }
-      if (hasPolRuleConditionVal()) {
-        hash = (37 * hash) + POLRULECONDITIONVAL_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionVal().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(policy.Policy.PolicyRuleCondition prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * <pre>
-     * Condition
-     * </pre>
-     *
-     * Protobuf type {@code policy.PolicyRuleCondition}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleCondition)
-        policy.Policy.PolicyRuleConditionOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleCondition.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = null;
-        } else {
-          polRuleConditionVar_ = null;
-          polRuleConditionVarBuilder_ = null;
-        }
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = null;
-        } else {
-          polRuleConditionVal_ = null;
-          polRuleConditionValBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleCondition.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition build() {
-        policy.Policy.PolicyRuleCondition result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition buildPartial() {
-        policy.Policy.PolicyRuleCondition result = new policy.Policy.PolicyRuleCondition(this);
-        if (polRuleConditionVarBuilder_ == null) {
-          result.polRuleConditionVar_ = polRuleConditionVar_;
-        } else {
-          result.polRuleConditionVar_ = polRuleConditionVarBuilder_.build();
-        }
-        if (polRuleConditionValBuilder_ == null) {
-          result.polRuleConditionVal_ = polRuleConditionVal_;
-        } else {
-          result.polRuleConditionVal_ = polRuleConditionValBuilder_.build();
-        }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleCondition) {
-          return mergeFrom((policy.Policy.PolicyRuleCondition)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleCondition other) {
-        if (other == policy.Policy.PolicyRuleCondition.getDefaultInstance()) return this;
-        if (other.hasPolRuleConditionVar()) {
-          mergePolRuleConditionVar(other.getPolRuleConditionVar());
-        }
-        if (other.hasPolRuleConditionVal()) {
-          mergePolRuleConditionVal(other.getPolRuleConditionVal());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        policy.Policy.PolicyRuleCondition parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleCondition) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleConditionVarBuilder_;
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       * @return Whether the polRuleConditionVar field is set.
-       */
-      public boolean hasPolRuleConditionVar() {
-        return polRuleConditionVarBuilder_ != null || polRuleConditionVar_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       * @return The polRuleConditionVar.
-       */
-      public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
-        if (polRuleConditionVarBuilder_ == null) {
-          return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-        } else {
-          return polRuleConditionVarBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder setPolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleConditionVarBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleConditionVar_ = value;
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder setPolRuleConditionVar(
-          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder mergePolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleConditionVarBuilder_ == null) {
-          if (polRuleConditionVar_ != null) {
-            polRuleConditionVar_ =
-              policy.Policy.PolicyRuleVariable.newBuilder(polRuleConditionVar_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleConditionVar_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder clearPolRuleConditionVar() {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = null;
-          onChanged();
-        } else {
-          polRuleConditionVar_ = null;
-          polRuleConditionVarBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariable.Builder getPolRuleConditionVarBuilder() {
-        
-        onChanged();
-        return getPolRuleConditionVarFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
-        if (polRuleConditionVarBuilder_ != null) {
-          return polRuleConditionVarBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleConditionVar_ == null ?
-              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
-          getPolRuleConditionVarFieldBuilder() {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
-                  getPolRuleConditionVar(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleConditionVar_ = null;
-        }
-        return polRuleConditionVarBuilder_;
-      }
-
-      private policy.Policy.PolicyRuleValue polRuleConditionVal_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleConditionValBuilder_;
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       * @return Whether the polRuleConditionVal field is set.
-       */
-      public boolean hasPolRuleConditionVal() {
-        return polRuleConditionValBuilder_ != null || polRuleConditionVal_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       * @return The polRuleConditionVal.
-       */
-      public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
-        if (polRuleConditionValBuilder_ == null) {
-          return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-        } else {
-          return polRuleConditionValBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder setPolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleConditionValBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleConditionVal_ = value;
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder setPolRuleConditionVal(
-          policy.Policy.PolicyRuleValue.Builder builderForValue) {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder mergePolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleConditionValBuilder_ == null) {
-          if (polRuleConditionVal_ != null) {
-            polRuleConditionVal_ =
-              policy.Policy.PolicyRuleValue.newBuilder(polRuleConditionVal_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleConditionVal_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder clearPolRuleConditionVal() {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = null;
-          onChanged();
-        } else {
-          polRuleConditionVal_ = null;
-          polRuleConditionValBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public policy.Policy.PolicyRuleValue.Builder getPolRuleConditionValBuilder() {
-        
-        onChanged();
-        return getPolRuleConditionValFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
-        if (polRuleConditionValBuilder_ != null) {
-          return polRuleConditionValBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleConditionVal_ == null ?
-              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
-          getPolRuleConditionValFieldBuilder() {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
-                  getPolRuleConditionVal(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleConditionVal_ = null;
-        }
-        return polRuleConditionValBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleCondition)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleCondition)
-    private static final policy.Policy.PolicyRuleCondition DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleCondition();
-    }
-
-    public static policy.Policy.PolicyRuleCondition getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleCondition>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleCondition>() {
-      @java.lang.Override
-      public PolicyRuleCondition parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleCondition(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleCondition> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleCondition> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleActionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleAction)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return Whether the polRuleActionVar field is set.
-     */
-    boolean hasPolRuleActionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return The polRuleActionVar.
-     */
-    policy.Policy.PolicyRuleVariable getPolRuleActionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     */
-    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder();
+  public interface PolicyRuleEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleEvent)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return Whether the polRuleActionVal field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasPolRuleActionVal();
+    boolean hasEvent();
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return The polRuleActionVal.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    policy.Policy.PolicyRuleValue getPolRuleActionVal();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
   }
   /**
    * <pre>
-   * Action
+   * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+   *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+   * Event
    * </pre>
    *
-   * Protobuf type {@code policy.PolicyRuleAction}
+   * Protobuf type {@code policy.PolicyRuleEvent}
    */
-  public static final class PolicyRuleAction extends
+  public static final class PolicyRuleEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleAction)
-      PolicyRuleActionOrBuilder {
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleEvent)
+      PolicyRuleEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use PolicyRuleAction.newBuilder() to construct.
-    private PolicyRuleAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use PolicyRuleEvent.newBuilder() to construct.
+    private PolicyRuleEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private PolicyRuleAction() {
+    private PolicyRuleEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new PolicyRuleAction();
+      return new PolicyRuleEvent();
     }
 
     @java.lang.Override
@@ -4294,7 +1680,7 @@ public final class Policy {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private PolicyRuleAction(
+    private PolicyRuleEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4313,27 +1699,14 @@ public final class Policy {
               done = true;
               break;
             case 10: {
-              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
-              if (polRuleActionVar_ != null) {
-                subBuilder = polRuleActionVar_.toBuilder();
-              }
-              polRuleActionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleActionVar_);
-                polRuleActionVar_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
-              if (polRuleActionVal_ != null) {
-                subBuilder = polRuleActionVal_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              polRuleActionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleActionVal_);
-                polRuleActionVal_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
 
               break;
@@ -4359,67 +1732,41 @@ public final class Policy {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
-    }
-
-    public static final int POLRULEACTIONVAR_FIELD_NUMBER = 1;
-    private policy.Policy.PolicyRuleVariable polRuleActionVar_;
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return Whether the polRuleActionVar field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleActionVar() {
-      return polRuleActionVar_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return The polRuleActionVar.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
-      return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
-      return getPolRuleActionVar();
+              policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
     }
 
-    public static final int POLRULEACTIONVAL_FIELD_NUMBER = 2;
-    private policy.Policy.PolicyRuleValue polRuleActionVal_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return Whether the polRuleActionVal field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasPolRuleActionVal() {
-      return polRuleActionVal_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return The polRuleActionVal.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
-      return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
-      return getPolRuleActionVal();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4436,11 +1783,8 @@ public final class Policy {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (polRuleActionVar_ != null) {
-        output.writeMessage(1, getPolRuleActionVar());
-      }
-      if (polRuleActionVal_ != null) {
-        output.writeMessage(2, getPolRuleActionVal());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
       unknownFields.writeTo(output);
     }
@@ -4451,13 +1795,9 @@ public final class Policy {
       if (size != -1) return size;
 
       size = 0;
-      if (polRuleActionVar_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getPolRuleActionVar());
-      }
-      if (polRuleActionVal_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getPolRuleActionVal());
+          .computeMessageSize(1, getEvent());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4469,20 +1809,15 @@ public final class Policy {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof policy.Policy.PolicyRuleAction)) {
+      if (!(obj instanceof policy.Policy.PolicyRuleEvent)) {
         return super.equals(obj);
       }
-      policy.Policy.PolicyRuleAction other = (policy.Policy.PolicyRuleAction) obj;
+      policy.Policy.PolicyRuleEvent other = (policy.Policy.PolicyRuleEvent) obj;
 
-      if (hasPolRuleActionVar() != other.hasPolRuleActionVar()) return false;
-      if (hasPolRuleActionVar()) {
-        if (!getPolRuleActionVar()
-            .equals(other.getPolRuleActionVar())) return false;
-      }
-      if (hasPolRuleActionVal() != other.hasPolRuleActionVal()) return false;
-      if (hasPolRuleActionVal()) {
-        if (!getPolRuleActionVal()
-            .equals(other.getPolRuleActionVal())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -4495,82 +1830,78 @@ public final class Policy {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasPolRuleActionVar()) {
-        hash = (37 * hash) + POLRULEACTIONVAR_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionVar().hashCode();
-      }
-      if (hasPolRuleActionVal()) {
-        hash = (37 * hash) + POLRULEACTIONVAL_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionVal().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(byte[] data)
+    public static policy.Policy.PolicyRuleEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(java.io.InputStream input)
+    public static policy.Policy.PolicyRuleEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseDelimitedFrom(java.io.InputStream input)
+    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseDelimitedFrom(
+    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4583,7 +1914,7 @@ public final class Policy {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(policy.Policy.PolicyRuleAction prototype) {
+    public static Builder newBuilder(policy.Policy.PolicyRuleEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4600,29 +1931,31 @@ public final class Policy {
     }
     /**
      * <pre>
-     * Action
+     * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+     *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+     * Event
      * </pre>
      *
-     * Protobuf type {@code policy.PolicyRuleAction}
+     * Protobuf type {@code policy.PolicyRuleEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleAction)
-        policy.Policy.PolicyRuleActionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleEvent)
+        policy.Policy.PolicyRuleEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
+                policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
       }
 
-      // Construct using policy.Policy.PolicyRuleAction.newBuilder()
+      // Construct using policy.Policy.PolicyRuleEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4640,17 +1973,11 @@ public final class Policy {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = null;
-        } else {
-          polRuleActionVar_ = null;
-          polRuleActionVarBuilder_ = null;
-        }
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          polRuleActionVal_ = null;
-          polRuleActionValBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
         return this;
       }
@@ -4658,17 +1985,17 @@ public final class Policy {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleAction.getDefaultInstance();
+      public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction build() {
-        policy.Policy.PolicyRuleAction result = buildPartial();
+      public policy.Policy.PolicyRuleEvent build() {
+        policy.Policy.PolicyRuleEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4676,17 +2003,12 @@ public final class Policy {
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction buildPartial() {
-        policy.Policy.PolicyRuleAction result = new policy.Policy.PolicyRuleAction(this);
-        if (polRuleActionVarBuilder_ == null) {
-          result.polRuleActionVar_ = polRuleActionVar_;
-        } else {
-          result.polRuleActionVar_ = polRuleActionVarBuilder_.build();
-        }
-        if (polRuleActionValBuilder_ == null) {
-          result.polRuleActionVal_ = polRuleActionVal_;
+      public policy.Policy.PolicyRuleEvent buildPartial() {
+        policy.Policy.PolicyRuleEvent result = new policy.Policy.PolicyRuleEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.polRuleActionVal_ = polRuleActionValBuilder_.build();
+          result.event_ = eventBuilder_.build();
         }
         onBuilt();
         return result;
@@ -4726,21 +2048,18 @@ public final class Policy {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleAction) {
-          return mergeFrom((policy.Policy.PolicyRuleAction)other);
+        if (other instanceof policy.Policy.PolicyRuleEvent) {
+          return mergeFrom((policy.Policy.PolicyRuleEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(policy.Policy.PolicyRuleAction other) {
-        if (other == policy.Policy.PolicyRuleAction.getDefaultInstance()) return this;
-        if (other.hasPolRuleActionVar()) {
-          mergePolRuleActionVar(other.getPolRuleActionVar());
-        }
-        if (other.hasPolRuleActionVal()) {
-          mergePolRuleActionVal(other.getPolRuleActionVal());
+      public Builder mergeFrom(policy.Policy.PolicyRuleEvent other) {
+        if (other == policy.Policy.PolicyRuleEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -4757,11 +2076,11 @@ public final class Policy {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        policy.Policy.PolicyRuleAction parsedMessage = null;
+        policy.Policy.PolicyRuleEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleAction) e.getUnfinishedMessage();
+          parsedMessage = (policy.Policy.PolicyRuleEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4771,242 +2090,123 @@ public final class Policy {
         return this;
       }
 
-      private policy.Policy.PolicyRuleVariable polRuleActionVar_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleActionVarBuilder_;
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       * @return Whether the polRuleActionVar field is set.
-       */
-      public boolean hasPolRuleActionVar() {
-        return polRuleActionVarBuilder_ != null || polRuleActionVar_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       * @return The polRuleActionVar.
-       */
-      public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
-        if (polRuleActionVarBuilder_ == null) {
-          return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-        } else {
-          return polRuleActionVarBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder setPolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleActionVarBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleActionVar_ = value;
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder setPolRuleActionVar(
-          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder mergePolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleActionVarBuilder_ == null) {
-          if (polRuleActionVar_ != null) {
-            polRuleActionVar_ =
-              policy.Policy.PolicyRuleVariable.newBuilder(polRuleActionVar_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleActionVar_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder clearPolRuleActionVar() {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = null;
-          onChanged();
-        } else {
-          polRuleActionVar_ = null;
-          polRuleActionVarBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariable.Builder getPolRuleActionVarBuilder() {
-        
-        onChanged();
-        return getPolRuleActionVarFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
-        if (polRuleActionVarBuilder_ != null) {
-          return polRuleActionVarBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleActionVar_ == null ?
-              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
-          getPolRuleActionVarFieldBuilder() {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
-                  getPolRuleActionVar(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleActionVar_ = null;
-        }
-        return polRuleActionVarBuilder_;
-      }
-
-      private policy.Policy.PolicyRuleValue polRuleActionVal_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleActionValBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-       * @return Whether the polRuleActionVal field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasPolRuleActionVal() {
-        return polRuleActionValBuilder_ != null || polRuleActionVal_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-       * @return The polRuleActionVal.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
-        if (polRuleActionValBuilder_ == null) {
-          return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return polRuleActionValBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setPolRuleActionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleActionValBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          polRuleActionVal_ = value;
+          event_ = value;
           onChanged();
         } else {
-          polRuleActionValBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setPolRuleActionVal(
-          policy.Policy.PolicyRuleValue.Builder builderForValue) {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          polRuleActionValBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergePolRuleActionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleActionValBuilder_ == null) {
-          if (polRuleActionVal_ != null) {
-            polRuleActionVal_ =
-              policy.Policy.PolicyRuleValue.newBuilder(polRuleActionVal_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            polRuleActionVal_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          polRuleActionValBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearPolRuleActionVal() {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          polRuleActionVal_ = null;
-          polRuleActionValBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public policy.Policy.PolicyRuleValue.Builder getPolRuleActionValBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getPolRuleActionValFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
-        if (polRuleActionValBuilder_ != null) {
-          return polRuleActionValBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return polRuleActionVal_ == null ?
-              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
-          getPolRuleActionValFieldBuilder() {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
-                  getPolRuleActionVal(),
+          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());
-          polRuleActionVal_ = null;
+          event_ = null;
         }
-        return polRuleActionValBuilder_;
+        return eventBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5021,41 +2221,41 @@ public final class Policy {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleAction)
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleAction)
-    private static final policy.Policy.PolicyRuleAction DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleEvent)
+    private static final policy.Policy.PolicyRuleEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleAction();
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleEvent();
     }
 
-    public static policy.Policy.PolicyRuleAction getDefaultInstance() {
+    public static policy.Policy.PolicyRuleEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<PolicyRuleAction>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleAction>() {
+    private static final com.google.protobuf.Parser<PolicyRuleEvent>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleEvent>() {
       @java.lang.Override
-      public PolicyRuleAction parsePartialFrom(
+      public PolicyRuleEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleAction(input, extensionRegistry);
+        return new PolicyRuleEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<PolicyRuleAction> parser() {
+    public static com.google.protobuf.Parser<PolicyRuleEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleAction> getParserForType() {
+    public com.google.protobuf.Parser<PolicyRuleEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
+    public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -5104,10 +2304,10 @@ public final class Policy {
     policy.Policy.PolicyRuleType getPolicyRuleType();
 
     /**
-     * <code>uint32 PolicyRulePriority = 3;</code>
-     * @return The policyRulePriority.
+     * <code>uint32 priority = 3;</code>
+     * @return The priority.
      */
-    int getPolicyRulePriority();
+    int getPriority();
 
     /**
      * <pre>
@@ -5141,153 +2341,155 @@ public final class Policy {
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    java.util.List<policy.Policy.PolicyRuleCondition> 
-        getPolRuleConditionListList();
+    java.util.List<policy.PolicyCondition.PolicyRuleCondition> 
+        getConditionListList();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index);
+    policy.PolicyCondition.PolicyRuleCondition getConditionList(int index);
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    int getPolRuleConditionListCount();
+    int getConditionListCount();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-        getPolRuleConditionListOrBuilderList();
+    java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+        getConditionListOrBuilderList();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+    policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
         int index);
 
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The enum numeric value on the wire for booleanOperator.
      */
-    java.util.List<policy.Policy.PolicyRuleAction> 
-        getPolRuleActionListList();
+    int getBooleanOperatorValue();
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The booleanOperator.
      */
-    policy.Policy.PolicyRuleAction getPolRuleActionList(int index);
+    policy.PolicyCondition.BooleanOperator getBooleanOperator();
+
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    int getPolRuleActionListCount();
+    java.util.List<policy.PolicyAction.PolicyRuleAction> 
+        getActionListList();
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-        getPolRuleActionListOrBuilderList();
+    policy.PolicyAction.PolicyRuleAction getActionList(int index);
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
-        int index);
-
+    int getActionListCount();
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceListList();
+    java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+        getActionListOrBuilderList();
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    context.ContextOuterClass.ServiceId getServiceList(int index);
+    policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
+        int index);
+
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return Whether the serviceId field is set.
      */
-    int getServiceListCount();
+    boolean hasServiceId();
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return The serviceId.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceListOrBuilderList();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     java.util.List<context.ContextOuterClass.DeviceId> 
         getDeviceListList();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     context.ContextOuterClass.DeviceId getDeviceList(int index);
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     int getDeviceListCount();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
         getDeviceListOrBuilderList();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
         int index);
@@ -5313,9 +2515,9 @@ public final class Policy {
     }
     private PolicyRule() {
       policyRuleType_ = 0;
-      polRuleConditionList_ = java.util.Collections.emptyList();
-      polRuleActionList_ = java.util.Collections.emptyList();
-      serviceList_ = java.util.Collections.emptyList();
+      conditionList_ = java.util.Collections.emptyList();
+      booleanOperator_ = 0;
+      actionList_ = java.util.Collections.emptyList();
       deviceList_ = java.util.Collections.emptyList();
     }
 
@@ -5371,7 +2573,7 @@ public final class Policy {
             }
             case 24: {
 
-              policyRulePriority_ = input.readUInt32();
+              priority_ = input.readUInt32();
               break;
             }
             case 34: {
@@ -5389,35 +2591,45 @@ public final class Policy {
             }
             case 42: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>();
+                conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              polRuleConditionList_.add(
-                  input.readMessage(policy.Policy.PolicyRuleCondition.parser(), extensionRegistry));
+              conditionList_.add(
+                  input.readMessage(policy.PolicyCondition.PolicyRuleCondition.parser(), extensionRegistry));
               break;
             }
-            case 50: {
+            case 48: {
+              int rawValue = input.readEnum();
+
+              booleanOperator_ = rawValue;
+              break;
+            }
+            case 58: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>();
+                actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>();
                 mutable_bitField0_ |= 0x00000002;
               }
-              polRuleActionList_.add(
-                  input.readMessage(policy.Policy.PolicyRuleAction.parser(), extensionRegistry));
+              actionList_.add(
+                  input.readMessage(policy.PolicyAction.PolicyRuleAction.parser(), extensionRegistry));
               break;
             }
-            case 58: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000004;
+            case 66: {
+              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();
               }
-              serviceList_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+
               break;
             }
-            case 66: {
-              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+            case 74: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                 deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000008;
+                mutable_bitField0_ |= 0x00000004;
               }
               deviceList_.add(
                   input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
@@ -5439,15 +2651,12 @@ public final class Policy {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+          conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
         }
         if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+          actionList_ = java.util.Collections.unmodifiableList(actionList_);
         }
         if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
-        }
-        if (((mutable_bitField0_ & 0x00000008) != 0)) {
           deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
         }
         this.unknownFields = unknownFields.build();
@@ -5524,15 +2733,15 @@ public final class Policy {
       return result == null ? policy.Policy.PolicyRuleType.UNRECOGNIZED : result;
     }
 
-    public static final int POLICYRULEPRIORITY_FIELD_NUMBER = 3;
-    private int policyRulePriority_;
+    public static final int PRIORITY_FIELD_NUMBER = 3;
+    private int priority_;
     /**
-     * <code>uint32 PolicyRulePriority = 3;</code>
-     * @return The policyRulePriority.
+     * <code>uint32 priority = 3;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public int getPolicyRulePriority() {
-      return policyRulePriority_;
+    public int getPriority() {
+      return priority_;
     }
 
     public static final int EVENT_FIELD_NUMBER = 4;
@@ -5573,197 +2782,202 @@ public final class Policy {
       return getEvent();
     }
 
-    public static final int POLRULECONDITIONLIST_FIELD_NUMBER = 5;
-    private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_;
+    public static final int CONDITIONLIST_FIELD_NUMBER = 5;
+    private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_;
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
-      return polRuleConditionList_;
+    public java.util.List<policy.PolicyCondition.PolicyRuleCondition> getConditionListList() {
+      return conditionList_;
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-        getPolRuleConditionListOrBuilderList() {
-      return polRuleConditionList_;
+    public java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+        getConditionListOrBuilderList() {
+      return conditionList_;
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public int getPolRuleConditionListCount() {
-      return polRuleConditionList_.size();
+    public int getConditionListCount() {
+      return conditionList_.size();
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
-      return polRuleConditionList_.get(index);
+    public policy.PolicyCondition.PolicyRuleCondition getConditionList(int index) {
+      return conditionList_.get(index);
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+    public policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
         int index) {
-      return polRuleConditionList_.get(index);
+      return conditionList_.get(index);
     }
 
-    public static final int POLRULEACTIONLIST_FIELD_NUMBER = 6;
-    private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_;
+    public static final int BOOLEANOPERATOR_FIELD_NUMBER = 6;
+    private int booleanOperator_;
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The enum numeric value on the wire for booleanOperator.
      */
-    @java.lang.Override
-    public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
-      return polRuleActionList_;
+    @java.lang.Override public int getBooleanOperatorValue() {
+      return booleanOperator_;
     }
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The booleanOperator.
      */
-    @java.lang.Override
-    public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-        getPolRuleActionListOrBuilderList() {
-      return polRuleActionList_;
+    @java.lang.Override public policy.PolicyCondition.BooleanOperator getBooleanOperator() {
+      @SuppressWarnings("deprecation")
+      policy.PolicyCondition.BooleanOperator result = policy.PolicyCondition.BooleanOperator.valueOf(booleanOperator_);
+      return result == null ? policy.PolicyCondition.BooleanOperator.UNRECOGNIZED : result;
     }
+
+    public static final int ACTIONLIST_FIELD_NUMBER = 7;
+    private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_;
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public int getPolRuleActionListCount() {
-      return polRuleActionList_.size();
+    public java.util.List<policy.PolicyAction.PolicyRuleAction> getActionListList() {
+      return actionList_;
     }
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
-      return polRuleActionList_.get(index);
+    public java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+        getActionListOrBuilderList() {
+      return actionList_;
     }
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
-        int index) {
-      return polRuleActionList_.get(index);
+    public int getActionListCount() {
+      return actionList_.size();
     }
-
-    public static final int SERVICELIST_FIELD_NUMBER = 7;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceList_;
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
-      return serviceList_;
+    public policy.PolicyAction.PolicyRuleAction getActionList(int index) {
+      return actionList_.get(index);
     }
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceListOrBuilderList() {
-      return serviceList_;
+    public policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
+        int index) {
+      return actionList_.get(index);
     }
+
+    public static final int SERVICEID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public int getServiceListCount() {
-      return serviceList_.size();
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceList(int index) {
-      return serviceList_.get(index);
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-        int index) {
-      return serviceList_.get(index);
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
 
-    public static final int DEVICELIST_FIELD_NUMBER = 8;
+    public static final int DEVICELIST_FIELD_NUMBER = 9;
     private java.util.List<context.ContextOuterClass.DeviceId> deviceList_;
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
       return deviceList_;
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
@@ -5771,21 +2985,21 @@ public final class Policy {
       return deviceList_;
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public int getDeviceListCount() {
       return deviceList_.size();
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceId getDeviceList(int index) {
       return deviceList_.get(index);
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
@@ -5813,23 +3027,26 @@ public final class Policy {
       if (policyRuleType_ != policy.Policy.PolicyRuleType.POLICYTYPE_DEVICE.getNumber()) {
         output.writeEnum(2, policyRuleType_);
       }
-      if (policyRulePriority_ != 0) {
-        output.writeUInt32(3, policyRulePriority_);
+      if (priority_ != 0) {
+        output.writeUInt32(3, priority_);
       }
       if (event_ != null) {
         output.writeMessage(4, getEvent());
       }
-      for (int i = 0; i < polRuleConditionList_.size(); i++) {
-        output.writeMessage(5, polRuleConditionList_.get(i));
+      for (int i = 0; i < conditionList_.size(); i++) {
+        output.writeMessage(5, conditionList_.get(i));
+      }
+      if (booleanOperator_ != policy.PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED.getNumber()) {
+        output.writeEnum(6, booleanOperator_);
       }
-      for (int i = 0; i < polRuleActionList_.size(); i++) {
-        output.writeMessage(6, polRuleActionList_.get(i));
+      for (int i = 0; i < actionList_.size(); i++) {
+        output.writeMessage(7, actionList_.get(i));
       }
-      for (int i = 0; i < serviceList_.size(); i++) {
-        output.writeMessage(7, serviceList_.get(i));
+      if (serviceId_ != null) {
+        output.writeMessage(8, getServiceId());
       }
       for (int i = 0; i < deviceList_.size(); i++) {
-        output.writeMessage(8, deviceList_.get(i));
+        output.writeMessage(9, deviceList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -5848,29 +3065,33 @@ public final class Policy {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(2, policyRuleType_);
       }
-      if (policyRulePriority_ != 0) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, policyRulePriority_);
+          .computeUInt32Size(3, priority_);
       }
       if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(4, getEvent());
       }
-      for (int i = 0; i < polRuleConditionList_.size(); i++) {
+      for (int i = 0; i < conditionList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, conditionList_.get(i));
+      }
+      if (booleanOperator_ != policy.PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, polRuleConditionList_.get(i));
+          .computeEnumSize(6, booleanOperator_);
       }
-      for (int i = 0; i < polRuleActionList_.size(); i++) {
+      for (int i = 0; i < actionList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, polRuleActionList_.get(i));
+          .computeMessageSize(7, actionList_.get(i));
       }
-      for (int i = 0; i < serviceList_.size(); i++) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, serviceList_.get(i));
+          .computeMessageSize(8, getServiceId());
       }
       for (int i = 0; i < deviceList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, deviceList_.get(i));
+          .computeMessageSize(9, deviceList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5893,19 +3114,23 @@ public final class Policy {
             .equals(other.getPolicyRuleId())) return false;
       }
       if (policyRuleType_ != other.policyRuleType_) return false;
-      if (getPolicyRulePriority()
-          != other.getPolicyRulePriority()) return false;
+      if (getPriority()
+          != other.getPriority()) return false;
       if (hasEvent() != other.hasEvent()) return false;
       if (hasEvent()) {
         if (!getEvent()
             .equals(other.getEvent())) return false;
       }
-      if (!getPolRuleConditionListList()
-          .equals(other.getPolRuleConditionListList())) return false;
-      if (!getPolRuleActionListList()
-          .equals(other.getPolRuleActionListList())) return false;
-      if (!getServiceListList()
-          .equals(other.getServiceListList())) return false;
+      if (!getConditionListList()
+          .equals(other.getConditionListList())) return false;
+      if (booleanOperator_ != other.booleanOperator_) return false;
+      if (!getActionListList()
+          .equals(other.getActionListList())) return false;
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
       if (!getDeviceListList()
           .equals(other.getDeviceListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -5925,23 +3150,25 @@ public final class Policy {
       }
       hash = (37 * hash) + POLICYRULETYPE_FIELD_NUMBER;
       hash = (53 * hash) + policyRuleType_;
-      hash = (37 * hash) + POLICYRULEPRIORITY_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRulePriority();
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       if (hasEvent()) {
         hash = (37 * hash) + EVENT_FIELD_NUMBER;
         hash = (53 * hash) + getEvent().hashCode();
       }
-      if (getPolRuleConditionListCount() > 0) {
-        hash = (37 * hash) + POLRULECONDITIONLIST_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionListList().hashCode();
+      if (getConditionListCount() > 0) {
+        hash = (37 * hash) + CONDITIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getConditionListList().hashCode();
       }
-      if (getPolRuleActionListCount() > 0) {
-        hash = (37 * hash) + POLRULEACTIONLIST_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionListList().hashCode();
+      hash = (37 * hash) + BOOLEANOPERATOR_FIELD_NUMBER;
+      hash = (53 * hash) + booleanOperator_;
+      if (getActionListCount() > 0) {
+        hash = (37 * hash) + ACTIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getActionListList().hashCode();
       }
-      if (getServiceListCount() > 0) {
-        hash = (37 * hash) + SERVICELIST_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceListList().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICEID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
       if (getDeviceListCount() > 0) {
         hash = (37 * hash) + DEVICELIST_FIELD_NUMBER;
@@ -6082,9 +3309,8 @@ public final class Policy {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPolRuleConditionListFieldBuilder();
-          getPolRuleActionListFieldBuilder();
-          getServiceListFieldBuilder();
+          getConditionListFieldBuilder();
+          getActionListFieldBuilder();
           getDeviceListFieldBuilder();
         }
       }
@@ -6099,7 +3325,7 @@ public final class Policy {
         }
         policyRuleType_ = 0;
 
-        policyRulePriority_ = 0;
+        priority_ = 0;
 
         if (eventBuilder_ == null) {
           event_ = null;
@@ -6107,27 +3333,29 @@ public final class Policy {
           event_ = null;
           eventBuilder_ = null;
         }
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionList_ = java.util.Collections.emptyList();
+        if (conditionListBuilder_ == null) {
+          conditionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          polRuleConditionListBuilder_.clear();
+          conditionListBuilder_.clear();
         }
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionList_ = java.util.Collections.emptyList();
+        booleanOperator_ = 0;
+
+        if (actionListBuilder_ == null) {
+          actionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
         } else {
-          polRuleActionListBuilder_.clear();
+          actionListBuilder_.clear();
         }
-        if (serviceListBuilder_ == null) {
-          serviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
         } else {
-          serviceListBuilder_.clear();
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
         if (deviceListBuilder_ == null) {
           deviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+          bitField0_ = (bitField0_ & ~0x00000004);
         } else {
           deviceListBuilder_.clear();
         }
@@ -6164,43 +3392,40 @@ public final class Policy {
           result.policyRuleId_ = policyRuleIdBuilder_.build();
         }
         result.policyRuleType_ = policyRuleType_;
-        result.policyRulePriority_ = policyRulePriority_;
+        result.priority_ = priority_;
         if (eventBuilder_ == null) {
           result.event_ = event_;
         } else {
           result.event_ = eventBuilder_.build();
         }
-        if (polRuleConditionListBuilder_ == null) {
+        if (conditionListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+            conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.polRuleConditionList_ = polRuleConditionList_;
+          result.conditionList_ = conditionList_;
         } else {
-          result.polRuleConditionList_ = polRuleConditionListBuilder_.build();
+          result.conditionList_ = conditionListBuilder_.build();
         }
-        if (polRuleActionListBuilder_ == null) {
+        result.booleanOperator_ = booleanOperator_;
+        if (actionListBuilder_ == null) {
           if (((bitField0_ & 0x00000002) != 0)) {
-            polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+            actionList_ = java.util.Collections.unmodifiableList(actionList_);
             bitField0_ = (bitField0_ & ~0x00000002);
           }
-          result.polRuleActionList_ = polRuleActionList_;
+          result.actionList_ = actionList_;
         } else {
-          result.polRuleActionList_ = polRuleActionListBuilder_.build();
+          result.actionList_ = actionListBuilder_.build();
         }
-        if (serviceListBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.serviceList_ = serviceList_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
         } else {
-          result.serviceList_ = serviceListBuilder_.build();
+          result.serviceId_ = serviceIdBuilder_.build();
         }
         if (deviceListBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) != 0)) {
+          if (((bitField0_ & 0x00000004) != 0)) {
             deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
-            bitField0_ = (bitField0_ & ~0x00000008);
+            bitField0_ = (bitField0_ & ~0x00000004);
           }
           result.deviceList_ = deviceList_;
         } else {
@@ -6260,95 +3485,75 @@ public final class Policy {
         if (other.policyRuleType_ != 0) {
           setPolicyRuleTypeValue(other.getPolicyRuleTypeValue());
         }
-        if (other.getPolicyRulePriority() != 0) {
-          setPolicyRulePriority(other.getPolicyRulePriority());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         if (other.hasEvent()) {
           mergeEvent(other.getEvent());
         }
-        if (polRuleConditionListBuilder_ == null) {
-          if (!other.polRuleConditionList_.isEmpty()) {
-            if (polRuleConditionList_.isEmpty()) {
-              polRuleConditionList_ = other.polRuleConditionList_;
+        if (conditionListBuilder_ == null) {
+          if (!other.conditionList_.isEmpty()) {
+            if (conditionList_.isEmpty()) {
+              conditionList_ = other.conditionList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensurePolRuleConditionListIsMutable();
-              polRuleConditionList_.addAll(other.polRuleConditionList_);
+              ensureConditionListIsMutable();
+              conditionList_.addAll(other.conditionList_);
             }
             onChanged();
           }
         } else {
-          if (!other.polRuleConditionList_.isEmpty()) {
-            if (polRuleConditionListBuilder_.isEmpty()) {
-              polRuleConditionListBuilder_.dispose();
-              polRuleConditionListBuilder_ = null;
-              polRuleConditionList_ = other.polRuleConditionList_;
+          if (!other.conditionList_.isEmpty()) {
+            if (conditionListBuilder_.isEmpty()) {
+              conditionListBuilder_.dispose();
+              conditionListBuilder_ = null;
+              conditionList_ = other.conditionList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              polRuleConditionListBuilder_ = 
+              conditionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPolRuleConditionListFieldBuilder() : null;
+                   getConditionListFieldBuilder() : null;
             } else {
-              polRuleConditionListBuilder_.addAllMessages(other.polRuleConditionList_);
+              conditionListBuilder_.addAllMessages(other.conditionList_);
             }
           }
         }
-        if (polRuleActionListBuilder_ == null) {
-          if (!other.polRuleActionList_.isEmpty()) {
-            if (polRuleActionList_.isEmpty()) {
-              polRuleActionList_ = other.polRuleActionList_;
+        if (other.booleanOperator_ != 0) {
+          setBooleanOperatorValue(other.getBooleanOperatorValue());
+        }
+        if (actionListBuilder_ == null) {
+          if (!other.actionList_.isEmpty()) {
+            if (actionList_.isEmpty()) {
+              actionList_ = other.actionList_;
               bitField0_ = (bitField0_ & ~0x00000002);
             } else {
-              ensurePolRuleActionListIsMutable();
-              polRuleActionList_.addAll(other.polRuleActionList_);
+              ensureActionListIsMutable();
+              actionList_.addAll(other.actionList_);
             }
             onChanged();
           }
         } else {
-          if (!other.polRuleActionList_.isEmpty()) {
-            if (polRuleActionListBuilder_.isEmpty()) {
-              polRuleActionListBuilder_.dispose();
-              polRuleActionListBuilder_ = null;
-              polRuleActionList_ = other.polRuleActionList_;
+          if (!other.actionList_.isEmpty()) {
+            if (actionListBuilder_.isEmpty()) {
+              actionListBuilder_.dispose();
+              actionListBuilder_ = null;
+              actionList_ = other.actionList_;
               bitField0_ = (bitField0_ & ~0x00000002);
-              polRuleActionListBuilder_ = 
+              actionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPolRuleActionListFieldBuilder() : null;
+                   getActionListFieldBuilder() : null;
             } else {
-              polRuleActionListBuilder_.addAllMessages(other.polRuleActionList_);
+              actionListBuilder_.addAllMessages(other.actionList_);
             }
           }
         }
-        if (serviceListBuilder_ == null) {
-          if (!other.serviceList_.isEmpty()) {
-            if (serviceList_.isEmpty()) {
-              serviceList_ = other.serviceList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureServiceListIsMutable();
-              serviceList_.addAll(other.serviceList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceList_.isEmpty()) {
-            if (serviceListBuilder_.isEmpty()) {
-              serviceListBuilder_.dispose();
-              serviceListBuilder_ = null;
-              serviceList_ = other.serviceList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              serviceListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceListFieldBuilder() : null;
-            } else {
-              serviceListBuilder_.addAllMessages(other.serviceList_);
-            }
-          }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
         if (deviceListBuilder_ == null) {
           if (!other.deviceList_.isEmpty()) {
             if (deviceList_.isEmpty()) {
               deviceList_ = other.deviceList_;
-              bitField0_ = (bitField0_ & ~0x00000008);
+              bitField0_ = (bitField0_ & ~0x00000004);
             } else {
               ensureDeviceListIsMutable();
               deviceList_.addAll(other.deviceList_);
@@ -6361,7 +3566,7 @@ public final class Policy {
               deviceListBuilder_.dispose();
               deviceListBuilder_ = null;
               deviceList_ = other.deviceList_;
-              bitField0_ = (bitField0_ & ~0x00000008);
+              bitField0_ = (bitField0_ & ~0x00000004);
               deviceListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getDeviceListFieldBuilder() : null;
@@ -6609,33 +3814,33 @@ public final class Policy {
         return this;
       }
 
-      private int policyRulePriority_ ;
+      private int priority_ ;
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
-       * @return The policyRulePriority.
+       * <code>uint32 priority = 3;</code>
+       * @return The priority.
        */
       @java.lang.Override
-      public int getPolicyRulePriority() {
-        return policyRulePriority_;
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
-       * @param value The policyRulePriority to set.
+       * <code>uint32 priority = 3;</code>
+       * @param value The priority to set.
        * @return This builder for chaining.
        */
-      public Builder setPolicyRulePriority(int value) {
+      public Builder setPriority(int value) {
         
-        policyRulePriority_ = value;
+        priority_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
+       * <code>uint32 priority = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearPolicyRulePriority() {
+      public Builder clearPriority() {
         
-        policyRulePriority_ = 0;
+        priority_ = 0;
         onChanged();
         return this;
       }
@@ -6795,30 +4000,30 @@ public final class Policy {
         return eventBuilder_;
       }
 
-      private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_ =
+      private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_ =
         java.util.Collections.emptyList();
-      private void ensurePolRuleConditionListIsMutable() {
+      private void ensureConditionListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>(polRuleConditionList_);
+          conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>(conditionList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> polRuleConditionListBuilder_;
+          policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder> conditionListBuilder_;
 
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
-        if (polRuleConditionListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+      public java.util.List<policy.PolicyCondition.PolicyRuleCondition> getConditionListList() {
+        if (conditionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(conditionList_);
         } else {
-          return polRuleConditionListBuilder_.getMessageList();
+          return conditionListBuilder_.getMessageList();
         }
       }
       /**
@@ -6826,13 +4031,13 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public int getPolRuleConditionListCount() {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.size();
+      public int getConditionListCount() {
+        if (conditionListBuilder_ == null) {
+          return conditionList_.size();
         } else {
-          return polRuleConditionListBuilder_.getCount();
+          return conditionListBuilder_.getCount();
         }
       }
       /**
@@ -6840,13 +4045,13 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.get(index);
+      public policy.PolicyCondition.PolicyRuleCondition getConditionList(int index) {
+        if (conditionListBuilder_ == null) {
+          return conditionList_.get(index);
         } else {
-          return polRuleConditionListBuilder_.getMessage(index);
+          return conditionListBuilder_.getMessage(index);
         }
       }
       /**
@@ -6854,19 +4059,19 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder setPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder setConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.set(index, value);
+          ensureConditionListIsMutable();
+          conditionList_.set(index, value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.setMessage(index, value);
+          conditionListBuilder_.setMessage(index, value);
         }
         return this;
       }
@@ -6875,16 +4080,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder setPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.set(index, builderForValue.build());
+      public Builder setConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.setMessage(index, builderForValue.build());
+          conditionListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -6893,18 +4098,18 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder addConditionList(policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(value);
+          ensureConditionListIsMutable();
+          conditionList_.add(value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(value);
+          conditionListBuilder_.addMessage(value);
         }
         return this;
       }
@@ -6913,19 +4118,19 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder addConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(index, value);
+          ensureConditionListIsMutable();
+          conditionList_.add(index, value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(index, value);
+          conditionListBuilder_.addMessage(index, value);
         }
         return this;
       }
@@ -6934,16 +4139,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(builderForValue.build());
+      public Builder addConditionList(
+          policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.add(builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(builderForValue.build());
+          conditionListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
@@ -6952,16 +4157,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(index, builderForValue.build());
+      public Builder addConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(index, builderForValue.build());
+          conditionListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -6970,17 +4175,17 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addAllPolRuleConditionList(
-          java.lang.Iterable<? extends policy.Policy.PolicyRuleCondition> values) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
+      public Builder addAllConditionList(
+          java.lang.Iterable<? extends policy.PolicyCondition.PolicyRuleCondition> values) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, polRuleConditionList_);
+              values, conditionList_);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addAllMessages(values);
+          conditionListBuilder_.addAllMessages(values);
         }
         return this;
       }
@@ -6989,15 +4194,15 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder clearPolRuleConditionList() {
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionList_ = java.util.Collections.emptyList();
+      public Builder clearConditionList() {
+        if (conditionListBuilder_ == null) {
+          conditionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.clear();
+          conditionListBuilder_.clear();
         }
         return this;
       }
@@ -7006,15 +4211,15 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder removePolRuleConditionList(int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.remove(index);
+      public Builder removeConditionList(int index) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.remove(index);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.remove(index);
+          conditionListBuilder_.remove(index);
         }
         return this;
       }
@@ -7023,24 +4228,24 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder getPolRuleConditionListBuilder(
+      public policy.PolicyCondition.PolicyRuleCondition.Builder getConditionListBuilder(
           int index) {
-        return getPolRuleConditionListFieldBuilder().getBuilder(index);
+        return getConditionListFieldBuilder().getBuilder(index);
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+      public policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
           int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.get(index);  } else {
-          return polRuleConditionListBuilder_.getMessageOrBuilder(index);
+        if (conditionListBuilder_ == null) {
+          return conditionList_.get(index);  } else {
+          return conditionListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
@@ -7048,14 +4253,14 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-           getPolRuleConditionListOrBuilderList() {
-        if (polRuleConditionListBuilder_ != null) {
-          return polRuleConditionListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+           getConditionListOrBuilderList() {
+        if (conditionListBuilder_ != null) {
+          return conditionListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+          return java.util.Collections.unmodifiableList(conditionList_);
         }
       }
       /**
@@ -7063,74 +4268,148 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder() {
-        return getPolRuleConditionListFieldBuilder().addBuilder(
-            policy.Policy.PolicyRuleCondition.getDefaultInstance());
+      public policy.PolicyCondition.PolicyRuleCondition.Builder addConditionListBuilder() {
+        return getConditionListFieldBuilder().addBuilder(
+            policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder(
+      public policy.PolicyCondition.PolicyRuleCondition.Builder addConditionListBuilder(
           int index) {
-        return getPolRuleConditionListFieldBuilder().addBuilder(
-            index, policy.Policy.PolicyRuleCondition.getDefaultInstance());
+        return getConditionListFieldBuilder().addBuilder(
+            index, policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleCondition.Builder> 
-           getPolRuleConditionListBuilderList() {
-        return getPolRuleConditionListFieldBuilder().getBuilderList();
+      public java.util.List<policy.PolicyCondition.PolicyRuleCondition.Builder> 
+           getConditionListBuilderList() {
+        return getConditionListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> 
-          getPolRuleConditionListFieldBuilder() {
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder>(
-                  polRuleConditionList_,
+          policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+          getConditionListFieldBuilder() {
+        if (conditionListBuilder_ == null) {
+          conditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder>(
+                  conditionList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          polRuleConditionList_ = null;
+          conditionList_ = null;
+        }
+        return conditionListBuilder_;
+      }
+
+      private int booleanOperator_ = 0;
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return The enum numeric value on the wire for booleanOperator.
+       */
+      @java.lang.Override public int getBooleanOperatorValue() {
+        return booleanOperator_;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @param value The enum numeric value on the wire for booleanOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBooleanOperatorValue(int value) {
+        
+        booleanOperator_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return The booleanOperator.
+       */
+      @java.lang.Override
+      public policy.PolicyCondition.BooleanOperator getBooleanOperator() {
+        @SuppressWarnings("deprecation")
+        policy.PolicyCondition.BooleanOperator result = policy.PolicyCondition.BooleanOperator.valueOf(booleanOperator_);
+        return result == null ? policy.PolicyCondition.BooleanOperator.UNRECOGNIZED : result;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @param value The booleanOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBooleanOperator(policy.PolicyCondition.BooleanOperator value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        return polRuleConditionListBuilder_;
+        
+        booleanOperator_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBooleanOperator() {
+        
+        booleanOperator_ = 0;
+        onChanged();
+        return this;
       }
 
-      private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_ =
+      private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_ =
         java.util.Collections.emptyList();
-      private void ensurePolRuleActionListIsMutable() {
+      private void ensureActionListIsMutable() {
         if (!((bitField0_ & 0x00000002) != 0)) {
-          polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>(polRuleActionList_);
+          actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>(actionList_);
           bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> polRuleActionListBuilder_;
+          policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder> actionListBuilder_;
 
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
-        if (polRuleActionListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(polRuleActionList_);
+      public java.util.List<policy.PolicyAction.PolicyRuleAction> getActionListList() {
+        if (actionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(actionList_);
         } else {
-          return polRuleActionListBuilder_.getMessageList();
+          return actionListBuilder_.getMessageList();
         }
       }
       /**
@@ -7138,13 +4417,13 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public int getPolRuleActionListCount() {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.size();
+      public int getActionListCount() {
+        if (actionListBuilder_ == null) {
+          return actionList_.size();
         } else {
-          return polRuleActionListBuilder_.getCount();
+          return actionListBuilder_.getCount();
         }
       }
       /**
@@ -7152,13 +4431,13 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.get(index);
+      public policy.PolicyAction.PolicyRuleAction getActionList(int index) {
+        if (actionListBuilder_ == null) {
+          return actionList_.get(index);
         } else {
-          return polRuleActionListBuilder_.getMessage(index);
+          return actionListBuilder_.getMessage(index);
         }
       }
       /**
@@ -7166,19 +4445,19 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder setPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder setActionList(
+          int index, policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.set(index, value);
+          ensureActionListIsMutable();
+          actionList_.set(index, value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.setMessage(index, value);
+          actionListBuilder_.setMessage(index, value);
         }
         return this;
       }
@@ -7187,16 +4466,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder setPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.set(index, builderForValue.build());
+      public Builder setActionList(
+          int index, policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.setMessage(index, builderForValue.build());
+          actionListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -7205,18 +4484,18 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder addActionList(policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(value);
+          ensureActionListIsMutable();
+          actionList_.add(value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(value);
+          actionListBuilder_.addMessage(value);
         }
         return this;
       }
@@ -7225,19 +4504,19 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder addActionList(
+          int index, policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(index, value);
+          ensureActionListIsMutable();
+          actionList_.add(index, value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(index, value);
+          actionListBuilder_.addMessage(index, value);
         }
         return this;
       }
@@ -7246,16 +4525,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(builderForValue.build());
+      public Builder addActionList(
+          policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.add(builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(builderForValue.build());
+          actionListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
@@ -7264,16 +4543,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(index, builderForValue.build());
+      public Builder addActionList(
+          int index, policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(index, builderForValue.build());
+          actionListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -7282,17 +4561,17 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addAllPolRuleActionList(
-          java.lang.Iterable<? extends policy.Policy.PolicyRuleAction> values) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
+      public Builder addAllActionList(
+          java.lang.Iterable<? extends policy.PolicyAction.PolicyRuleAction> values) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, polRuleActionList_);
+              values, actionList_);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addAllMessages(values);
+          actionListBuilder_.addAllMessages(values);
         }
         return this;
       }
@@ -7301,15 +4580,15 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder clearPolRuleActionList() {
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionList_ = java.util.Collections.emptyList();
+      public Builder clearActionList() {
+        if (actionListBuilder_ == null) {
+          actionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
-          polRuleActionListBuilder_.clear();
+          actionListBuilder_.clear();
         }
         return this;
       }
@@ -7318,15 +4597,15 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder removePolRuleActionList(int index) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.remove(index);
+      public Builder removeActionList(int index) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.remove(index);
           onChanged();
         } else {
-          polRuleActionListBuilder_.remove(index);
+          actionListBuilder_.remove(index);
         }
         return this;
       }
@@ -7335,24 +4614,24 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder getPolRuleActionListBuilder(
+      public policy.PolicyAction.PolicyRuleAction.Builder getActionListBuilder(
           int index) {
-        return getPolRuleActionListFieldBuilder().getBuilder(index);
+        return getActionListFieldBuilder().getBuilder(index);
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
+      public policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
           int index) {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.get(index);  } else {
-          return polRuleActionListBuilder_.getMessageOrBuilder(index);
+        if (actionListBuilder_ == null) {
+          return actionList_.get(index);  } else {
+          return actionListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
@@ -7360,14 +4639,14 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-           getPolRuleActionListOrBuilderList() {
-        if (polRuleActionListBuilder_ != null) {
-          return polRuleActionListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+           getActionListOrBuilderList() {
+        if (actionListBuilder_ != null) {
+          return actionListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(polRuleActionList_);
+          return java.util.Collections.unmodifiableList(actionList_);
         }
       }
       /**
@@ -7375,368 +4654,211 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder() {
-        return getPolRuleActionListFieldBuilder().addBuilder(
-            policy.Policy.PolicyRuleAction.getDefaultInstance());
+      public policy.PolicyAction.PolicyRuleAction.Builder addActionListBuilder() {
+        return getActionListFieldBuilder().addBuilder(
+            policy.PolicyAction.PolicyRuleAction.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder(
+      public policy.PolicyAction.PolicyRuleAction.Builder addActionListBuilder(
           int index) {
-        return getPolRuleActionListFieldBuilder().addBuilder(
-            index, policy.Policy.PolicyRuleAction.getDefaultInstance());
+        return getActionListFieldBuilder().addBuilder(
+            index, policy.PolicyAction.PolicyRuleAction.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleAction.Builder> 
-           getPolRuleActionListBuilderList() {
-        return getPolRuleActionListFieldBuilder().getBuilderList();
+      public java.util.List<policy.PolicyAction.PolicyRuleAction.Builder> 
+           getActionListBuilderList() {
+        return getActionListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> 
-          getPolRuleActionListFieldBuilder() {
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder>(
-                  polRuleActionList_,
+          policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder> 
+          getActionListFieldBuilder() {
+        if (actionListBuilder_ == null) {
+          actionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder>(
+                  actionList_,
                   ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
-          polRuleActionList_ = null;
+          actionList_ = null;
         }
-        return polRuleActionListBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceList_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceListIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceList_);
-          bitField0_ |= 0x00000004;
-         }
+        return actionListBuilder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceListBuilder_;
-
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
-        if (serviceListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceList_);
-        } else {
-          return serviceListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public int getServiceListCount() {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.size();
-        } else {
-          return serviceListBuilder_.getCount();
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId getServiceList(int index) {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.get(index);
-        } else {
-          return serviceListBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder setServiceList(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceListIsMutable();
-          serviceList_.set(index, value);
-          onChanged();
-        } else {
-          serviceListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
+       * @return Whether the serviceId field is set.
        */
-      public Builder setServiceList(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
+       * @return The serviceId.
        */
-      public Builder addServiceList(context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceListIsMutable();
-          serviceList_.add(value);
-          onChanged();
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          serviceListBuilder_.addMessage(value);
+          return serviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder addServiceList(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceListIsMutable();
-          serviceList_.add(index, value);
+          serviceId_ = value;
           onChanged();
         } else {
-          serviceListBuilder_.addMessage(index, value);
+          serviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder addServiceList(
+      public Builder setServiceId(
           context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder addServiceList(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder addAllServiceList(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceList_);
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          serviceListBuilder_.addAllMessages(values);
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder clearServiceList() {
-        if (serviceListBuilder_ == null) {
-          serviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
           onChanged();
         } else {
-          serviceListBuilder_.clear();
+          serviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder removeServiceList(int index) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.remove(index);
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          serviceListBuilder_.remove(index);
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceListBuilder(
-          int index) {
-        return getServiceListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-          int index) {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.get(index);  } else {
-          return serviceListBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceListOrBuilderList() {
-        if (serviceListBuilder_ != null) {
-          return serviceListBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(serviceList_);
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
        * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder() {
-        return getServiceListFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder(
-          int index) {
-        return getServiceListFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceListBuilderList() {
-        return getServiceListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
+      private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceListFieldBuilder() {
-        if (serviceListBuilder_ == null) {
-          serviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceList_,
-                  ((bitField0_ & 0x00000004) != 0),
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          serviceList_ = null;
+          serviceId_ = null;
         }
-        return serviceListBuilder_;
+        return serviceIdBuilder_;
       }
 
       private java.util.List<context.ContextOuterClass.DeviceId> deviceList_ =
         java.util.Collections.emptyList();
       private void ensureDeviceListIsMutable() {
-        if (!((bitField0_ & 0x00000008) != 0)) {
+        if (!((bitField0_ & 0x00000004) != 0)) {
           deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceList_);
-          bitField0_ |= 0x00000008;
+          bitField0_ |= 0x00000004;
          }
       }
 
@@ -7744,7 +4866,7 @@ public final class Policy {
           context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceListBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
         if (deviceListBuilder_ == null) {
@@ -7754,7 +4876,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public int getDeviceListCount() {
         if (deviceListBuilder_ == null) {
@@ -7764,7 +4886,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId getDeviceList(int index) {
         if (deviceListBuilder_ == null) {
@@ -7774,7 +4896,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder setDeviceList(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -7791,7 +4913,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder setDeviceList(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7805,7 +4927,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(context.ContextOuterClass.DeviceId value) {
         if (deviceListBuilder_ == null) {
@@ -7821,7 +4943,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -7838,7 +4960,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7852,7 +4974,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7866,7 +4988,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addAllDeviceList(
           java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
@@ -7881,12 +5003,12 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder clearDeviceList() {
         if (deviceListBuilder_ == null) {
           deviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
           deviceListBuilder_.clear();
@@ -7894,7 +5016,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder removeDeviceList(int index) {
         if (deviceListBuilder_ == null) {
@@ -7907,14 +5029,14 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder getDeviceListBuilder(
           int index) {
         return getDeviceListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
           int index) {
@@ -7924,7 +5046,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
            getDeviceListOrBuilderList() {
@@ -7935,14 +5057,14 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder() {
         return getDeviceListFieldBuilder().addBuilder(
             context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder(
           int index) {
@@ -7950,7 +5072,7 @@ public final class Policy {
             index, context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
            getDeviceListBuilderList() {
@@ -7963,7 +5085,7 @@ public final class Policy {
           deviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
                   deviceList_,
-                  ((bitField0_ & 0x00000008) != 0),
+                  ((bitField0_ & 0x00000004) != 0),
                   getParentForChildren(),
                   isClean());
           deviceList_ = null;
@@ -8834,31 +5956,11 @@ public final class Policy {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_policy_PolicyRuleState_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleVariable_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleVariable_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleValue_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleValue_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_policy_PolicyRuleEvent_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_policy_PolicyRuleEvent_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleCondition_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleCondition_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleAction_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleAction_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_policy_PolicyRule_descriptor;
   private static final 
@@ -8878,50 +5980,45 @@ public final class Policy {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\014policy.proto\022\006policy\032\rcontext.proto\"+\n" +
-      "\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.context.Uu" +
-      "id\"b\n\017PolicyRuleState\022#\n\014policyRuleId\030\001 " +
-      "\001(\0132\r.context.Uuid\022*\n\017policyRuleState\030\002 " +
-      "\001(\0162\021.policy.RuleState\"0\n\022PolicyRuleVari" +
-      "able\022\032\n\022policyRuleVariable\030\001 \001(\t\"*\n\017Poli" +
-      "cyRuleValue\022\027\n\017policyRuleValue\030\001 \001(\t\"0\n\017" +
-      "PolicyRuleEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
-      ".Event\"\204\001\n\023PolicyRuleCondition\0227\n\023polRul" +
-      "eConditionVar\030\001 \001(\0132\032.policy.PolicyRuleV" +
-      "ariable\0224\n\023polRuleConditionVal\030\002 \001(\0132\027.p" +
-      "olicy.PolicyRuleValue\"{\n\020PolicyRuleActio" +
-      "n\0224\n\020polRuleActionVar\030\001 \001(\0132\032.policy.Pol" +
-      "icyRuleVariable\0221\n\020polRuleActionVal\030\002 \001(" +
-      "\0132\027.policy.PolicyRuleValue\"\354\002\n\nPolicyRul" +
-      "e\022*\n\014policyRuleId\030\001 \001(\0132\024.policy.PolicyR" +
-      "uleId\022.\n\016policyRuleType\030\002 \001(\0162\026.policy.P" +
-      "olicyRuleType\022\032\n\022PolicyRulePriority\030\003 \001(" +
-      "\r\022&\n\005event\030\004 \001(\0132\027.policy.PolicyRuleEven" +
-      "t\0229\n\024polRuleConditionList\030\005 \003(\0132\033.policy" +
-      ".PolicyRuleCondition\0223\n\021polRuleActionLis" +
-      "t\030\006 \003(\0132\030.policy.PolicyRuleAction\022\'\n\013ser" +
-      "viceList\030\007 \003(\0132\022.context.ServiceId\022%\n\nde" +
-      "viceList\030\010 \003(\0132\021.context.DeviceId\"<\n\016Pol" +
-      "icyRuleList\022*\n\016policyRuleList\030\001 \003(\0132\022.po" +
-      "licy.PolicyRule*G\n\tRuleState\022\023\n\017POLICY_I" +
-      "NACTIVE\020\000\022\022\n\016POLICY_PLANNED\020\001\022\021\n\rPOLICY_" +
-      "ACTIVE\020\002*?\n\016PolicyRuleType\022\025\n\021POLICYTYPE" +
-      "_DEVICE\020\000\022\026\n\022POLICYTYPE_NETWORK\020\0012\214\003\n\rPo" +
-      "licyService\022:\n\tPolicyAdd\022\022.policy.Policy" +
-      "Rule\032\027.policy.PolicyRuleState\"\000\022=\n\014Polic" +
-      "yUpdate\022\022.policy.PolicyRule\032\027.policy.Pol" +
-      "icyRuleState\"\000\022=\n\014PolicyDelete\022\022.policy." +
-      "PolicyRule\032\027.policy.PolicyRuleState\"\000\0227\n" +
-      "\tGetPolicy\022\024.policy.PolicyRuleId\032\022.polic" +
-      "y.PolicyRule\"\000\022B\n\023GetPolicyByDeviceId\022\021." +
-      "context.DeviceId\032\026.policy.PolicyRuleList" +
-      "\"\000\022D\n\024GetPolicyByServiceId\022\022.context.Ser" +
-      "viceId\032\026.policy.PolicyRuleList\"\000b\006proto3"
+      "\n\014policy.proto\022\006policy\032\rcontext.proto\032\026p" +
+      "olicy-condition.proto\032\023policy-action.pro" +
+      "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
+      "xt.Uuid\"b\n\017PolicyRuleState\022#\n\014policyRule" +
+      "Id\030\001 \001(\0132\r.context.Uuid\022*\n\017policyRuleSta" +
+      "te\030\002 \001(\0162\021.policy.RuleState\"0\n\017PolicyRul" +
+      "eEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\"\204\003" +
+      "\n\nPolicyRule\022*\n\014policyRuleId\030\001 \001(\0132\024.pol" +
+      "icy.PolicyRuleId\022.\n\016policyRuleType\030\002 \001(\016" +
+      "2\026.policy.PolicyRuleType\022\020\n\010priority\030\003 \001" +
+      "(\r\022&\n\005event\030\004 \001(\0132\027.policy.PolicyRuleEve" +
+      "nt\0222\n\rconditionList\030\005 \003(\0132\033.policy.Polic" +
+      "yRuleCondition\0220\n\017booleanOperator\030\006 \001(\0162" +
+      "\027.policy.BooleanOperator\022,\n\nactionList\030\007" +
+      " \003(\0132\030.policy.PolicyRuleAction\022%\n\tservic" +
+      "eId\030\010 \001(\0132\022.context.ServiceId\022%\n\ndeviceL" +
+      "ist\030\t \003(\0132\021.context.DeviceId\"<\n\016PolicyRu" +
+      "leList\022*\n\016policyRuleList\030\001 \003(\0132\022.policy." +
+      "PolicyRule*G\n\tRuleState\022\023\n\017POLICY_INACTI" +
+      "VE\020\000\022\022\n\016POLICY_PLANNED\020\001\022\021\n\rPOLICY_ACTIV" +
+      "E\020\002*?\n\016PolicyRuleType\022\025\n\021POLICYTYPE_DEVI" +
+      "CE\020\000\022\026\n\022POLICYTYPE_NETWORK\020\0012\214\003\n\rPolicyS" +
+      "ervice\022:\n\tPolicyAdd\022\022.policy.PolicyRule\032" +
+      "\027.policy.PolicyRuleState\"\000\022=\n\014PolicyUpda" +
+      "te\022\022.policy.PolicyRule\032\027.policy.PolicyRu" +
+      "leState\"\000\022=\n\014PolicyDelete\022\022.policy.Polic" +
+      "yRule\032\027.policy.PolicyRuleState\"\000\0227\n\tGetP" +
+      "olicy\022\024.policy.PolicyRuleId\032\022.policy.Pol" +
+      "icyRule\"\000\022B\n\023GetPolicyByDeviceId\022\021.conte" +
+      "xt.DeviceId\032\026.policy.PolicyRuleList\"\000\022D\n" +
+      "\024GetPolicyByServiceId\022\022.context.ServiceI" +
+      "d\032\026.policy.PolicyRuleList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
           context.ContextOuterClass.getDescriptor(),
+          policy.PolicyCondition.getDescriptor(),
+          policy.PolicyAction.getDescriptor(),
         });
     internal_static_policy_PolicyRuleId_descriptor =
       getDescriptor().getMessageTypes().get(0);
@@ -8935,49 +6032,27 @@ public final class Policy {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleState_descriptor,
         new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", });
-    internal_static_policy_PolicyRuleVariable_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_policy_PolicyRuleVariable_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleVariable_descriptor,
-        new java.lang.String[] { "PolicyRuleVariable", });
-    internal_static_policy_PolicyRuleValue_descriptor =
-      getDescriptor().getMessageTypes().get(3);
-    internal_static_policy_PolicyRuleValue_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleValue_descriptor,
-        new java.lang.String[] { "PolicyRuleValue", });
     internal_static_policy_PolicyRuleEvent_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(2);
     internal_static_policy_PolicyRuleEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleEvent_descriptor,
         new java.lang.String[] { "Event", });
-    internal_static_policy_PolicyRuleCondition_descriptor =
-      getDescriptor().getMessageTypes().get(5);
-    internal_static_policy_PolicyRuleCondition_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleCondition_descriptor,
-        new java.lang.String[] { "PolRuleConditionVar", "PolRuleConditionVal", });
-    internal_static_policy_PolicyRuleAction_descriptor =
-      getDescriptor().getMessageTypes().get(6);
-    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleAction_descriptor,
-        new java.lang.String[] { "PolRuleActionVar", "PolRuleActionVal", });
     internal_static_policy_PolicyRule_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_policy_PolicyRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRule_descriptor,
-        new java.lang.String[] { "PolicyRuleId", "PolicyRuleType", "PolicyRulePriority", "Event", "PolRuleConditionList", "PolRuleActionList", "ServiceList", "DeviceList", });
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleType", "Priority", "Event", "ConditionList", "BooleanOperator", "ActionList", "ServiceId", "DeviceList", });
     internal_static_policy_PolicyRuleList_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_policy_PolicyRuleList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleList_descriptor,
         new java.lang.String[] { "PolicyRuleList", });
     context.ContextOuterClass.getDescriptor();
+    policy.PolicyCondition.getDescriptor();
+    policy.PolicyAction.getDescriptor();
   }
 
   // @@protoc_insertion_point(outer_class_scope)
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..1baaf538dc031be9443984f640826ccd893290e4
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
@@ -0,0 +1,932 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: policy-action.proto
+
+package policy;
+
+public final class PolicyAction {
+  private PolicyAction() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code policy.PolicyRuleActionEnum}
+   */
+  public enum PolicyRuleActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>POLICYRULE_ACTION_NO_ACTION = 0;</code>
+     */
+    POLICYRULE_ACTION_NO_ACTION(0),
+    /**
+     * <code>POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;</code>
+     */
+    POLICYRULE_ACTION_SET_DEVICE_STATUS(1),
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;</code>
+     */
+    POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE(2),
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
+     */
+    POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>POLICYRULE_ACTION_NO_ACTION = 0;</code>
+     */
+    public static final int POLICYRULE_ACTION_NO_ACTION_VALUE = 0;
+    /**
+     * <code>POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;</code>
+     */
+    public static final int POLICYRULE_ACTION_SET_DEVICE_STATUS_VALUE = 1;
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;</code>
+     */
+    public static final int POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE_VALUE = 2;
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
+     */
+    public static final int POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static PolicyRuleActionEnum 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 PolicyRuleActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return POLICYRULE_ACTION_NO_ACTION;
+        case 1: return POLICYRULE_ACTION_SET_DEVICE_STATUS;
+        case 2: return POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE;
+        case 3: return POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<PolicyRuleActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        PolicyRuleActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<PolicyRuleActionEnum>() {
+            public PolicyRuleActionEnum findValueByNumber(int number) {
+              return PolicyRuleActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return policy.PolicyAction.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final PolicyRuleActionEnum[] VALUES = values();
+
+    public static PolicyRuleActionEnum 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 PolicyRuleActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleActionEnum)
+  }
+
+  public interface PolicyRuleActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    int getActionValue();
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The action.
+     */
+    policy.PolicyAction.PolicyRuleActionEnum getAction();
+
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return A list containing the parameters.
+     */
+    java.util.List<java.lang.String>
+        getParametersList();
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return The count of parameters.
+     */
+    int getParametersCount();
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the element to return.
+     * @return The parameters at the given index.
+     */
+    java.lang.String getParameters(int index);
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the parameters at the given index.
+     */
+    com.google.protobuf.ByteString
+        getParametersBytes(int index);
+  }
+  /**
+   * <pre>
+   * Action
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleAction}
+   */
+  public static final class PolicyRuleAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleAction)
+      PolicyRuleActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleAction.newBuilder() to construct.
+    private PolicyRuleAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleAction() {
+      action_ = 0;
+      parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleAction(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      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();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                parameters_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              parameters_.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)) {
+          parameters_ = parameters_.getUnmodifiableView();
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.PolicyAction.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.PolicyAction.PolicyRuleAction.class, policy.PolicyAction.PolicyRuleAction.Builder.class);
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public policy.PolicyAction.PolicyRuleActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      policy.PolicyAction.PolicyRuleActionEnum result = policy.PolicyAction.PolicyRuleActionEnum.valueOf(action_);
+      return result == null ? policy.PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int PARAMETERS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList parameters_;
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return A list containing the parameters.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getParametersList() {
+      return parameters_;
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return The count of parameters.
+     */
+    public int getParametersCount() {
+      return parameters_.size();
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the element to return.
+     * @return The parameters at the given index.
+     */
+    public java.lang.String getParameters(int index) {
+      return parameters_.get(index);
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the parameters at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getParametersBytes(int index) {
+      return parameters_.getByteString(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (action_ != policy.PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION.getNumber()) {
+        output.writeEnum(1, action_);
+      }
+      for (int i = 0; i < parameters_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, parameters_.getRaw(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (action_ != policy.PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, action_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < parameters_.size(); i++) {
+          dataSize += computeStringSizeNoTag(parameters_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getParametersList().size();
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof policy.PolicyAction.PolicyRuleAction)) {
+        return super.equals(obj);
+      }
+      policy.PolicyAction.PolicyRuleAction other = (policy.PolicyAction.PolicyRuleAction) obj;
+
+      if (action_ != other.action_) return false;
+      if (!getParametersList()
+          .equals(other.getParametersList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      if (getParametersCount() > 0) {
+        hash = (37 * hash) + PARAMETERS_FIELD_NUMBER;
+        hash = (53 * hash) + getParametersList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(policy.PolicyAction.PolicyRuleAction prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * Action
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleAction)
+        policy.PolicyAction.PolicyRuleActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.PolicyAction.PolicyRuleAction.class, policy.PolicyAction.PolicyRuleAction.Builder.class);
+      }
+
+      // Construct using policy.PolicyAction.PolicyRuleAction.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        action_ = 0;
+
+        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction getDefaultInstanceForType() {
+        return policy.PolicyAction.PolicyRuleAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction build() {
+        policy.PolicyAction.PolicyRuleAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction buildPartial() {
+        policy.PolicyAction.PolicyRuleAction result = new policy.PolicyAction.PolicyRuleAction(this);
+        int from_bitField0_ = bitField0_;
+        result.action_ = action_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          parameters_ = parameters_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.parameters_ = parameters_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof policy.PolicyAction.PolicyRuleAction) {
+          return mergeFrom((policy.PolicyAction.PolicyRuleAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.PolicyAction.PolicyRuleAction other) {
+        if (other == policy.PolicyAction.PolicyRuleAction.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
+        }
+        if (!other.parameters_.isEmpty()) {
+          if (parameters_.isEmpty()) {
+            parameters_ = other.parameters_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureParametersIsMutable();
+            parameters_.addAll(other.parameters_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        policy.PolicyAction.PolicyRuleAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.PolicyAction.PolicyRuleAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private int action_ = 0;
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum 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>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        policy.PolicyAction.PolicyRuleActionEnum result = policy.PolicyAction.PolicyRuleActionEnum.valueOf(action_);
+        return result == null ? policy.PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(policy.PolicyAction.PolicyRuleActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.LazyStringList parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureParametersIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          parameters_ = new com.google.protobuf.LazyStringArrayList(parameters_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return A list containing the parameters.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getParametersList() {
+        return parameters_.getUnmodifiableView();
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return The count of parameters.
+       */
+      public int getParametersCount() {
+        return parameters_.size();
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index of the element to return.
+       * @return The parameters at the given index.
+       */
+      public java.lang.String getParameters(int index) {
+        return parameters_.get(index);
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index of the value to return.
+       * @return The bytes of the parameters at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getParametersBytes(int index) {
+        return parameters_.getByteString(index);
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index to set the value at.
+       * @param value The parameters to set.
+       * @return This builder for chaining.
+       */
+      public Builder setParameters(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureParametersIsMutable();
+        parameters_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param value The parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addParameters(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureParametersIsMutable();
+        parameters_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param values The parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllParameters(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureParametersIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, parameters_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearParameters() {
+        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param value The bytes of the parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addParametersBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureParametersIsMutable();
+        parameters_.add(value);
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleAction)
+    private static final policy.PolicyAction.PolicyRuleAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.PolicyAction.PolicyRuleAction();
+    }
+
+    public static policy.PolicyAction.PolicyRuleAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleAction>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleAction>() {
+      @java.lang.Override
+      public PolicyRuleAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.PolicyAction.PolicyRuleAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleAction_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\023policy-action.proto\022\006policy\"T\n\020PolicyR" +
+      "uleAction\022,\n\006action\030\001 \001(\0162\034.policy.Polic" +
+      "yRuleActionEnum\022\022\n\nparameters\030\002 \003(\t*\274\001\n\024" +
+      "PolicyRuleActionEnum\022\037\n\033POLICYRULE_ACTIO" +
+      "N_NO_ACTION\020\000\022\'\n#POLICYRULE_ACTION_SET_D" +
+      "EVICE_STATUS\020\001\022,\n(POLICYRULE_ACTION_ADD_" +
+      "SERVICE_CONFIGRULE\020\002\022,\n(POLICYRULE_ACTIO" +
+      "N_ADD_SERVICE_CONSTRAINT\020\003b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_policy_PolicyRuleAction_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleAction_descriptor,
+        new java.lang.String[] { "Action", "Parameters", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
index 509c3db6a207f475e3e39257938f68143142c483..2bde987ea6b48fa4a5285775a235d26892ee3b81 100644
--- a/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
@@ -19,109 +19,125 @@ public final class PolicyCondition {
    * Operator to be used when comparing Kpis with condition values
    * </pre>
    *
-   * Protobuf enum {@code policy.PolicyRuleConditionComparisonOperator}
+   * Protobuf enum {@code policy.NumericalOperator}
    */
-  public enum PolicyRuleConditionComparisonOperator
+  public enum NumericalOperator
       implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * Kpi numerical operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_UNDEFINED(0),
     /**
      * <pre>
      * Kpi is equal with value
      * </pre>
      *
-     * <code>EQUAL = 0;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;</code>
      */
-    EQUAL(0),
+    POLICYRULE_CONDITION_NUMERICAL_EQUAL(1),
     /**
      * <pre>
      * Kpi is not equal with value
      * </pre>
      *
-     * <code>NOT_EQUAL = 1;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;</code>
      */
-    NOT_EQUAL(1),
+    POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL(2),
     /**
      * <pre>
      * Kpi is less than value
      * </pre>
      *
-     * <code>LESS_THAN = 2;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;</code>
      */
-    LESS_THAN(2),
+    POLICYRULE_CONDITION_NUMERICAL_LESS_THAN(3),
     /**
      * <pre>
      * Kpi is less than or equal with value
      * </pre>
      *
-     * <code>LESS_THAN_EQUAL = 3;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;</code>
      */
-    LESS_THAN_EQUAL(3),
+    POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL(4),
     /**
      * <pre>
      * Kpi is greater than value
      * </pre>
      *
-     * <code>GREATER_THAN = 4;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;</code>
      */
-    GREATER_THAN(4),
+    POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN(5),
     /**
      * <pre>
      * Kpi is less than or equal with value
      * </pre>
      *
-     * <code>GREATER_THAN_EQUAL = 5;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6;</code>
      */
-    GREATER_THAN_EQUAL(5),
+    POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL(6),
     UNRECOGNIZED(-1),
     ;
 
+    /**
+     * <pre>
+     * Kpi numerical operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_UNDEFINED_VALUE = 0;
     /**
      * <pre>
      * Kpi is equal with value
      * </pre>
      *
-     * <code>EQUAL = 0;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;</code>
      */
-    public static final int EQUAL_VALUE = 0;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_EQUAL_VALUE = 1;
     /**
      * <pre>
      * Kpi is not equal with value
      * </pre>
      *
-     * <code>NOT_EQUAL = 1;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;</code>
      */
-    public static final int NOT_EQUAL_VALUE = 1;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL_VALUE = 2;
     /**
      * <pre>
      * Kpi is less than value
      * </pre>
      *
-     * <code>LESS_THAN = 2;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;</code>
      */
-    public static final int LESS_THAN_VALUE = 2;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_VALUE = 3;
     /**
      * <pre>
      * Kpi is less than or equal with value
      * </pre>
      *
-     * <code>LESS_THAN_EQUAL = 3;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;</code>
      */
-    public static final int LESS_THAN_EQUAL_VALUE = 3;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL_VALUE = 4;
     /**
      * <pre>
      * Kpi is greater than value
      * </pre>
      *
-     * <code>GREATER_THAN = 4;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;</code>
      */
-    public static final int GREATER_THAN_VALUE = 4;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_VALUE = 5;
     /**
      * <pre>
      * Kpi is less than or equal with value
      * </pre>
      *
-     * <code>GREATER_THAN_EQUAL = 5;</code>
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6;</code>
      */
-    public static final int GREATER_THAN_EQUAL_VALUE = 5;
+    public static final int POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL_VALUE = 6;
 
 
     public final int getNumber() {
@@ -138,7 +154,7 @@ public final class PolicyCondition {
      * @deprecated Use {@link #forNumber(int)} instead.
      */
     @java.lang.Deprecated
-    public static PolicyRuleConditionComparisonOperator valueOf(int value) {
+    public static NumericalOperator valueOf(int value) {
       return forNumber(value);
     }
 
@@ -146,27 +162,28 @@ public final class PolicyCondition {
      * @param value The numeric wire value of the corresponding enum entry.
      * @return The enum associated with the given numeric wire value.
      */
-    public static PolicyRuleConditionComparisonOperator forNumber(int value) {
+    public static NumericalOperator forNumber(int value) {
       switch (value) {
-        case 0: return EQUAL;
-        case 1: return NOT_EQUAL;
-        case 2: return LESS_THAN;
-        case 3: return LESS_THAN_EQUAL;
-        case 4: return GREATER_THAN;
-        case 5: return GREATER_THAN_EQUAL;
+        case 0: return POLICYRULE_CONDITION_NUMERICAL_UNDEFINED;
+        case 1: return POLICYRULE_CONDITION_NUMERICAL_EQUAL;
+        case 2: return POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL;
+        case 3: return POLICYRULE_CONDITION_NUMERICAL_LESS_THAN;
+        case 4: return POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+        case 5: return POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN;
+        case 6: return POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
         default: return null;
       }
     }
 
-    public static com.google.protobuf.Internal.EnumLiteMap<PolicyRuleConditionComparisonOperator>
+    public static com.google.protobuf.Internal.EnumLiteMap<NumericalOperator>
         internalGetValueMap() {
       return internalValueMap;
     }
     private static final com.google.protobuf.Internal.EnumLiteMap<
-        PolicyRuleConditionComparisonOperator> internalValueMap =
-          new com.google.protobuf.Internal.EnumLiteMap<PolicyRuleConditionComparisonOperator>() {
-            public PolicyRuleConditionComparisonOperator findValueByNumber(int number) {
-              return PolicyRuleConditionComparisonOperator.forNumber(number);
+        NumericalOperator> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<NumericalOperator>() {
+            public NumericalOperator findValueByNumber(int number) {
+              return NumericalOperator.forNumber(number);
             }
           };
 
@@ -187,9 +204,9 @@ public final class PolicyCondition {
       return policy.PolicyCondition.getDescriptor().getEnumTypes().get(0);
     }
 
-    private static final PolicyRuleConditionComparisonOperator[] VALUES = values();
+    private static final NumericalOperator[] VALUES = values();
 
-    public static PolicyRuleConditionComparisonOperator valueOf(
+    public static NumericalOperator valueOf(
         com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
       if (desc.getType() != getDescriptor()) {
         throw new java.lang.IllegalArgumentException(
@@ -203,11 +220,11 @@ public final class PolicyCondition {
 
     private final int value;
 
-    private PolicyRuleConditionComparisonOperator(int value) {
+    private NumericalOperator(int value) {
       this.value = value;
     }
 
-    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleConditionComparisonOperator)
+    // @@protoc_insertion_point(enum_scope:policy.NumericalOperator)
   }
 
   /**
@@ -215,45 +232,61 @@ public final class PolicyCondition {
    * Operator to be used when evaluating each condition
    * </pre>
    *
-   * Protobuf enum {@code policy.PolicyRuleConditionEvaluationOperator}
+   * Protobuf enum {@code policy.BooleanOperator}
    */
-  public enum PolicyRuleConditionEvaluationOperator
+  public enum BooleanOperator
       implements com.google.protobuf.ProtocolMessageEnum {
     /**
      * <pre>
-     * Logical AND operator
+     * Boolean operator undefined
      * </pre>
      *
-     * <code>AND = 0;</code>
+     * <code>POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;</code>
      */
-    AND(0),
+    POLICYRULE_CONDITION_BOOLEAN_UNDEFINED(0),
     /**
      * <pre>
-     * Logical OR operator
+     * Boolean AND operator
      * </pre>
      *
-     * <code>OR = 1;</code>
+     * <code>POLICYRULE_CONDITION_BOOLEAN_AND = 1;</code>
      */
-    OR(1),
+    POLICYRULE_CONDITION_BOOLEAN_AND(1),
+    /**
+     * <pre>
+     * Boolean OR operator
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_OR = 2;</code>
+     */
+    POLICYRULE_CONDITION_BOOLEAN_OR(2),
     UNRECOGNIZED(-1),
     ;
 
     /**
      * <pre>
-     * Logical AND operator
+     * Boolean operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;</code>
+     */
+    public static final int POLICYRULE_CONDITION_BOOLEAN_UNDEFINED_VALUE = 0;
+    /**
+     * <pre>
+     * Boolean AND operator
      * </pre>
      *
-     * <code>AND = 0;</code>
+     * <code>POLICYRULE_CONDITION_BOOLEAN_AND = 1;</code>
      */
-    public static final int AND_VALUE = 0;
+    public static final int POLICYRULE_CONDITION_BOOLEAN_AND_VALUE = 1;
     /**
      * <pre>
-     * Logical OR operator
+     * Boolean OR operator
      * </pre>
      *
-     * <code>OR = 1;</code>
+     * <code>POLICYRULE_CONDITION_BOOLEAN_OR = 2;</code>
      */
-    public static final int OR_VALUE = 1;
+    public static final int POLICYRULE_CONDITION_BOOLEAN_OR_VALUE = 2;
 
 
     public final int getNumber() {
@@ -270,7 +303,7 @@ public final class PolicyCondition {
      * @deprecated Use {@link #forNumber(int)} instead.
      */
     @java.lang.Deprecated
-    public static PolicyRuleConditionEvaluationOperator valueOf(int value) {
+    public static BooleanOperator valueOf(int value) {
       return forNumber(value);
     }
 
@@ -278,23 +311,24 @@ public final class PolicyCondition {
      * @param value The numeric wire value of the corresponding enum entry.
      * @return The enum associated with the given numeric wire value.
      */
-    public static PolicyRuleConditionEvaluationOperator forNumber(int value) {
+    public static BooleanOperator forNumber(int value) {
       switch (value) {
-        case 0: return AND;
-        case 1: return OR;
+        case 0: return POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+        case 1: return POLICYRULE_CONDITION_BOOLEAN_AND;
+        case 2: return POLICYRULE_CONDITION_BOOLEAN_OR;
         default: return null;
       }
     }
 
-    public static com.google.protobuf.Internal.EnumLiteMap<PolicyRuleConditionEvaluationOperator>
+    public static com.google.protobuf.Internal.EnumLiteMap<BooleanOperator>
         internalGetValueMap() {
       return internalValueMap;
     }
     private static final com.google.protobuf.Internal.EnumLiteMap<
-        PolicyRuleConditionEvaluationOperator> internalValueMap =
-          new com.google.protobuf.Internal.EnumLiteMap<PolicyRuleConditionEvaluationOperator>() {
-            public PolicyRuleConditionEvaluationOperator findValueByNumber(int number) {
-              return PolicyRuleConditionEvaluationOperator.forNumber(number);
+        BooleanOperator> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<BooleanOperator>() {
+            public BooleanOperator findValueByNumber(int number) {
+              return BooleanOperator.forNumber(number);
             }
           };
 
@@ -315,9 +349,9 @@ public final class PolicyCondition {
       return policy.PolicyCondition.getDescriptor().getEnumTypes().get(1);
     }
 
-    private static final PolicyRuleConditionEvaluationOperator[] VALUES = values();
+    private static final BooleanOperator[] VALUES = values();
 
-    public static PolicyRuleConditionEvaluationOperator valueOf(
+    public static BooleanOperator valueOf(
         com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
       if (desc.getType() != getDescriptor()) {
         throw new java.lang.IllegalArgumentException(
@@ -331,11 +365,11 @@ public final class PolicyCondition {
 
     private final int value;
 
-    private PolicyRuleConditionEvaluationOperator(int value) {
+    private BooleanOperator(int value) {
       this.value = value;
     }
 
-    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleConditionEvaluationOperator)
+    // @@protoc_insertion_point(enum_scope:policy.BooleanOperator)
   }
 
   public interface PolicyRuleConditionOrBuilder extends
@@ -358,15 +392,15 @@ public final class PolicyCondition {
     monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
 
     /**
-     * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-     * @return The enum numeric value on the wire for polRuleConditionComparisonOperator.
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The enum numeric value on the wire for numericalOperator.
      */
-    int getPolRuleConditionComparisonOperatorValue();
+    int getNumericalOperatorValue();
     /**
-     * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-     * @return The polRuleConditionComparisonOperator.
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The numericalOperator.
      */
-    policy.PolicyCondition.PolicyRuleConditionComparisonOperator getPolRuleConditionComparisonOperator();
+    policy.PolicyCondition.NumericalOperator getNumericalOperator();
 
     /**
      * <code>.monitoring.KpiValue kpiValue = 3;</code>
@@ -400,7 +434,7 @@ public final class PolicyCondition {
       super(builder);
     }
     private PolicyRuleCondition() {
-      polRuleConditionComparisonOperator_ = 0;
+      numericalOperator_ = 0;
     }
 
     @java.lang.Override
@@ -449,7 +483,7 @@ public final class PolicyCondition {
             case 16: {
               int rawValue = input.readEnum();
 
-              polRuleConditionComparisonOperator_ = rawValue;
+              numericalOperator_ = rawValue;
               break;
             }
             case 26: {
@@ -523,23 +557,23 @@ public final class PolicyCondition {
       return getKpiId();
     }
 
-    public static final int POLRULECONDITIONCOMPARISONOPERATOR_FIELD_NUMBER = 2;
-    private int polRuleConditionComparisonOperator_;
+    public static final int NUMERICALOPERATOR_FIELD_NUMBER = 2;
+    private int numericalOperator_;
     /**
-     * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-     * @return The enum numeric value on the wire for polRuleConditionComparisonOperator.
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The enum numeric value on the wire for numericalOperator.
      */
-    @java.lang.Override public int getPolRuleConditionComparisonOperatorValue() {
-      return polRuleConditionComparisonOperator_;
+    @java.lang.Override public int getNumericalOperatorValue() {
+      return numericalOperator_;
     }
     /**
-     * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-     * @return The polRuleConditionComparisonOperator.
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The numericalOperator.
      */
-    @java.lang.Override public policy.PolicyCondition.PolicyRuleConditionComparisonOperator getPolRuleConditionComparisonOperator() {
+    @java.lang.Override public policy.PolicyCondition.NumericalOperator getNumericalOperator() {
       @SuppressWarnings("deprecation")
-      policy.PolicyCondition.PolicyRuleConditionComparisonOperator result = policy.PolicyCondition.PolicyRuleConditionComparisonOperator.valueOf(polRuleConditionComparisonOperator_);
-      return result == null ? policy.PolicyCondition.PolicyRuleConditionComparisonOperator.UNRECOGNIZED : result;
+      policy.PolicyCondition.NumericalOperator result = policy.PolicyCondition.NumericalOperator.valueOf(numericalOperator_);
+      return result == null ? policy.PolicyCondition.NumericalOperator.UNRECOGNIZED : result;
     }
 
     public static final int KPIVALUE_FIELD_NUMBER = 3;
@@ -585,8 +619,8 @@ public final class PolicyCondition {
       if (kpiId_ != null) {
         output.writeMessage(1, getKpiId());
       }
-      if (polRuleConditionComparisonOperator_ != policy.PolicyCondition.PolicyRuleConditionComparisonOperator.EQUAL.getNumber()) {
-        output.writeEnum(2, polRuleConditionComparisonOperator_);
+      if (numericalOperator_ != policy.PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED.getNumber()) {
+        output.writeEnum(2, numericalOperator_);
       }
       if (kpiValue_ != null) {
         output.writeMessage(3, getKpiValue());
@@ -604,9 +638,9 @@ public final class PolicyCondition {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getKpiId());
       }
-      if (polRuleConditionComparisonOperator_ != policy.PolicyCondition.PolicyRuleConditionComparisonOperator.EQUAL.getNumber()) {
+      if (numericalOperator_ != policy.PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, polRuleConditionComparisonOperator_);
+          .computeEnumSize(2, numericalOperator_);
       }
       if (kpiValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
@@ -632,7 +666,7 @@ public final class PolicyCondition {
         if (!getKpiId()
             .equals(other.getKpiId())) return false;
       }
-      if (polRuleConditionComparisonOperator_ != other.polRuleConditionComparisonOperator_) return false;
+      if (numericalOperator_ != other.numericalOperator_) return false;
       if (hasKpiValue() != other.hasKpiValue()) return false;
       if (hasKpiValue()) {
         if (!getKpiValue()
@@ -653,8 +687,8 @@ public final class PolicyCondition {
         hash = (37 * hash) + KPIID_FIELD_NUMBER;
         hash = (53 * hash) + getKpiId().hashCode();
       }
-      hash = (37 * hash) + POLRULECONDITIONCOMPARISONOPERATOR_FIELD_NUMBER;
-      hash = (53 * hash) + polRuleConditionComparisonOperator_;
+      hash = (37 * hash) + NUMERICALOPERATOR_FIELD_NUMBER;
+      hash = (53 * hash) + numericalOperator_;
       if (hasKpiValue()) {
         hash = (37 * hash) + KPIVALUE_FIELD_NUMBER;
         hash = (53 * hash) + getKpiValue().hashCode();
@@ -802,7 +836,7 @@ public final class PolicyCondition {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
-        polRuleConditionComparisonOperator_ = 0;
+        numericalOperator_ = 0;
 
         if (kpiValueBuilder_ == null) {
           kpiValue_ = null;
@@ -841,7 +875,7 @@ public final class PolicyCondition {
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
-        result.polRuleConditionComparisonOperator_ = polRuleConditionComparisonOperator_;
+        result.numericalOperator_ = numericalOperator_;
         if (kpiValueBuilder_ == null) {
           result.kpiValue_ = kpiValue_;
         } else {
@@ -898,8 +932,8 @@ public final class PolicyCondition {
         if (other.hasKpiId()) {
           mergeKpiId(other.getKpiId());
         }
-        if (other.polRuleConditionComparisonOperator_ != 0) {
-          setPolRuleConditionComparisonOperatorValue(other.getPolRuleConditionComparisonOperatorValue());
+        if (other.numericalOperator_ != 0) {
+          setNumericalOperatorValue(other.getNumericalOperatorValue());
         }
         if (other.hasKpiValue()) {
           mergeKpiValue(other.getKpiValue());
@@ -1052,56 +1086,56 @@ public final class PolicyCondition {
         return kpiIdBuilder_;
       }
 
-      private int polRuleConditionComparisonOperator_ = 0;
+      private int numericalOperator_ = 0;
       /**
-       * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-       * @return The enum numeric value on the wire for polRuleConditionComparisonOperator.
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @return The enum numeric value on the wire for numericalOperator.
        */
-      @java.lang.Override public int getPolRuleConditionComparisonOperatorValue() {
-        return polRuleConditionComparisonOperator_;
+      @java.lang.Override public int getNumericalOperatorValue() {
+        return numericalOperator_;
       }
       /**
-       * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-       * @param value The enum numeric value on the wire for polRuleConditionComparisonOperator to set.
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @param value The enum numeric value on the wire for numericalOperator to set.
        * @return This builder for chaining.
        */
-      public Builder setPolRuleConditionComparisonOperatorValue(int value) {
+      public Builder setNumericalOperatorValue(int value) {
         
-        polRuleConditionComparisonOperator_ = value;
+        numericalOperator_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-       * @return The polRuleConditionComparisonOperator.
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @return The numericalOperator.
        */
       @java.lang.Override
-      public policy.PolicyCondition.PolicyRuleConditionComparisonOperator getPolRuleConditionComparisonOperator() {
+      public policy.PolicyCondition.NumericalOperator getNumericalOperator() {
         @SuppressWarnings("deprecation")
-        policy.PolicyCondition.PolicyRuleConditionComparisonOperator result = policy.PolicyCondition.PolicyRuleConditionComparisonOperator.valueOf(polRuleConditionComparisonOperator_);
-        return result == null ? policy.PolicyCondition.PolicyRuleConditionComparisonOperator.UNRECOGNIZED : result;
+        policy.PolicyCondition.NumericalOperator result = policy.PolicyCondition.NumericalOperator.valueOf(numericalOperator_);
+        return result == null ? policy.PolicyCondition.NumericalOperator.UNRECOGNIZED : result;
       }
       /**
-       * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
-       * @param value The polRuleConditionComparisonOperator to set.
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @param value The numericalOperator to set.
        * @return This builder for chaining.
        */
-      public Builder setPolRuleConditionComparisonOperator(policy.PolicyCondition.PolicyRuleConditionComparisonOperator value) {
+      public Builder setNumericalOperator(policy.PolicyCondition.NumericalOperator value) {
         if (value == null) {
           throw new NullPointerException();
         }
         
-        polRuleConditionComparisonOperator_ = value.getNumber();
+        numericalOperator_ = value.getNumber();
         onChanged();
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleConditionComparisonOperator polRuleConditionComparisonOperator = 2;</code>
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearPolRuleConditionComparisonOperator() {
+      public Builder clearNumericalOperator() {
         
-        polRuleConditionComparisonOperator_ = 0;
+        numericalOperator_ = 0;
         onChanged();
         return this;
       }
@@ -1292,17 +1326,23 @@ public final class PolicyCondition {
   static {
     java.lang.String[] descriptorData = {
       "\n\026policy-condition.proto\022\006policy\032\020monito" +
-      "ring.proto\"\272\001\n\023PolicyRuleCondition\022 \n\005kp" +
-      "iId\030\001 \001(\0132\021.monitoring.KpiId\022Y\n\"polRuleC" +
-      "onditionComparisonOperator\030\002 \001(\0162-.polic" +
-      "y.PolicyRuleConditionComparisonOperator\022" +
-      "&\n\010kpiValue\030\003 \001(\0132\024.monitoring.KpiValue*" +
-      "\217\001\n%PolicyRuleConditionComparisonOperato" +
-      "r\022\t\n\005EQUAL\020\000\022\r\n\tNOT_EQUAL\020\001\022\r\n\tLESS_THAN" +
-      "\020\002\022\023\n\017LESS_THAN_EQUAL\020\003\022\020\n\014GREATER_THAN\020" +
-      "\004\022\026\n\022GREATER_THAN_EQUAL\020\005*8\n%PolicyRuleC" +
-      "onditionEvaluationOperator\022\007\n\003AND\020\000\022\006\n\002O" +
-      "R\020\001b\006proto3"
+      "ring.proto\"\225\001\n\023PolicyRuleCondition\022 \n\005kp" +
+      "iId\030\001 \001(\0132\021.monitoring.KpiId\0224\n\021numerica" +
+      "lOperator\030\002 \001(\0162\031.policy.NumericalOperat" +
+      "or\022&\n\010kpiValue\030\003 \001(\0132\024.monitoring.KpiVal" +
+      "ue*\343\002\n\021NumericalOperator\022,\n(POLICYRULE_C" +
+      "ONDITION_NUMERICAL_UNDEFINED\020\000\022(\n$POLICY" +
+      "RULE_CONDITION_NUMERICAL_EQUAL\020\001\022,\n(POLI" +
+      "CYRULE_CONDITION_NUMERICAL_NOT_EQUAL\020\002\022," +
+      "\n(POLICYRULE_CONDITION_NUMERICAL_LESS_TH" +
+      "AN\020\003\0222\n.POLICYRULE_CONDITION_NUMERICAL_L" +
+      "ESS_THAN_EQUAL\020\004\022/\n+POLICYRULE_CONDITION" +
+      "_NUMERICAL_GREATER_THAN\020\005\0225\n1POLICYRULE_" +
+      "CONDITION_NUMERICAL_GREATER_THAN_EQUAL\020\006" +
+      "*\210\001\n\017BooleanOperator\022*\n&POLICYRULE_CONDI" +
+      "TION_BOOLEAN_UNDEFINED\020\000\022$\n POLICYRULE_C" +
+      "ONDITION_BOOLEAN_AND\020\001\022#\n\037POLICYRULE_CON" +
+      "DITION_BOOLEAN_OR\020\002b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -1314,7 +1354,7 @@ public final class PolicyCondition {
     internal_static_policy_PolicyRuleCondition_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleCondition_descriptor,
-        new java.lang.String[] { "KpiId", "PolRuleConditionComparisonOperator", "KpiValue", });
+        new java.lang.String[] { "KpiId", "NumericalOperator", "KpiValue", });
     monitoring.Monitoring.getDescriptor();
   }