@eide/foir-proto-ts 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eide/foir-proto-ts",
3
- "version": "0.40.0",
3
+ "version": "0.42.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./analytics/v1/analytics_pb": "./src/analytics/v1/analytics_pb.js",
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
  // @ts-nocheck
5
5
 
6
- import { ApplyExperimentWinnerRequest, ApplyExperimentWinnerResponse, CreateExperimentRequest, CreateExperimentResponse, DeleteExperimentRequest, DeleteExperimentResponse, EndExperimentRequest, EndExperimentResponse, ForceAssignExperimentRequest, ForceAssignExperimentResponse, GetCustomerAssignmentsRequest, GetCustomerAssignmentsResponse, GetExperimentByKeyRequest, GetExperimentByKeyResponse, GetExperimentRequest, GetExperimentResponse, GetExperimentStatsRequest, GetExperimentStatsResponse, ListExperimentsRequest, ListExperimentsResponse, PauseExperimentRequest, PauseExperimentResponse, RemoveExperimentAssignmentRequest, RemoveExperimentAssignmentResponse, ResolveExposureRequest, ResolveExposureResponse, ResumeExperimentRequest, ResumeExperimentResponse, StartExperimentRequest, StartExperimentResponse, UpdateExperimentRequest, UpdateExperimentResponse } from "./experiments_pbjs";
6
+ import { ApplyExperimentWinnerRequest, ApplyExperimentWinnerResponse, CreateExperimentRequest, CreateExperimentResponse, DeleteExperimentRequest, DeleteExperimentResponse, EndExperimentRequest, EndExperimentResponse, ForceAssignExperimentRequest, ForceAssignExperimentResponse, GetAssignmentsRequest, GetAssignmentsResponse, GetExperimentByKeyRequest, GetExperimentByKeyResponse, GetExperimentRequest, GetExperimentResponse, GetExperimentStatsRequest, GetExperimentStatsResponse, ListExperimentDeclarationsRequest, ListExperimentDeclarationsResponse, ListExperimentsRequest, ListExperimentsResponse, PauseExperimentRequest, PauseExperimentResponse, PreviewExperimentWinnerRolloutRequest, PreviewExperimentWinnerRolloutResponse, RemoveExperimentAssignmentRequest, RemoveExperimentAssignmentResponse, ResolveExposureRequest, ResolveExposureResponse, ResumeExperimentRequest, ResumeExperimentResponse, RollbackExperimentRequest, RollbackExperimentResponse, StartExperimentRequest, StartExperimentResponse, UpdateExperimentRequest, UpdateExperimentResponse } from "./experiments_pbjs";
7
7
  import { MethodKind } from "@bufbuild/protobuf";
8
8
 
9
9
  /**
@@ -117,6 +117,24 @@ export declare const ExperimentsService: {
117
117
  readonly O: typeof ApplyExperimentWinnerResponse,
118
118
  readonly kind: MethodKind.Unary,
119
119
  },
120
+ /**
121
+ * @generated from rpc experiments.v1.ExperimentsService.PreviewExperimentWinnerRollout
122
+ */
123
+ readonly previewExperimentWinnerRollout: {
124
+ readonly name: "PreviewExperimentWinnerRollout",
125
+ readonly I: typeof PreviewExperimentWinnerRolloutRequest,
126
+ readonly O: typeof PreviewExperimentWinnerRolloutResponse,
127
+ readonly kind: MethodKind.Unary,
128
+ },
129
+ /**
130
+ * @generated from rpc experiments.v1.ExperimentsService.RollbackExperiment
131
+ */
132
+ readonly rollbackExperiment: {
133
+ readonly name: "RollbackExperiment",
134
+ readonly I: typeof RollbackExperimentRequest,
135
+ readonly O: typeof RollbackExperimentResponse,
136
+ readonly kind: MethodKind.Unary,
137
+ },
120
138
  /**
121
139
  * Stats.
122
140
  *
@@ -149,12 +167,12 @@ export declare const ExperimentsService: {
149
167
  readonly kind: MethodKind.Unary,
150
168
  },
151
169
  /**
152
- * @generated from rpc experiments.v1.ExperimentsService.GetCustomerAssignments
170
+ * @generated from rpc experiments.v1.ExperimentsService.GetAssignments
153
171
  */
154
- readonly getCustomerAssignments: {
155
- readonly name: "GetCustomerAssignments",
156
- readonly I: typeof GetCustomerAssignmentsRequest,
157
- readonly O: typeof GetCustomerAssignmentsResponse,
172
+ readonly getAssignments: {
173
+ readonly name: "GetAssignments",
174
+ readonly I: typeof GetAssignmentsRequest,
175
+ readonly O: typeof GetAssignmentsResponse,
158
176
  readonly kind: MethodKind.Unary,
159
177
  },
160
178
  /**
@@ -168,6 +186,17 @@ export declare const ExperimentsService: {
168
186
  readonly O: typeof ResolveExposureResponse,
169
187
  readonly kind: MethodKind.Unary,
170
188
  },
189
+ /**
190
+ * Declarations (for typed codegen on the public API).
191
+ *
192
+ * @generated from rpc experiments.v1.ExperimentsService.ListExperimentDeclarations
193
+ */
194
+ readonly listExperimentDeclarations: {
195
+ readonly name: "ListExperimentDeclarations",
196
+ readonly I: typeof ListExperimentDeclarationsRequest,
197
+ readonly O: typeof ListExperimentDeclarationsResponse,
198
+ readonly kind: MethodKind.Unary,
199
+ },
171
200
  }
172
201
  };
173
202
 
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
  // @ts-nocheck
5
5
 
6
- import { ApplyExperimentWinnerRequest, ApplyExperimentWinnerResponse, CreateExperimentRequest, CreateExperimentResponse, DeleteExperimentRequest, DeleteExperimentResponse, EndExperimentRequest, EndExperimentResponse, ForceAssignExperimentRequest, ForceAssignExperimentResponse, GetCustomerAssignmentsRequest, GetCustomerAssignmentsResponse, GetExperimentByKeyRequest, GetExperimentByKeyResponse, GetExperimentRequest, GetExperimentResponse, GetExperimentStatsRequest, GetExperimentStatsResponse, ListExperimentsRequest, ListExperimentsResponse, PauseExperimentRequest, PauseExperimentResponse, RemoveExperimentAssignmentRequest, RemoveExperimentAssignmentResponse, ResolveExposureRequest, ResolveExposureResponse, ResumeExperimentRequest, ResumeExperimentResponse, StartExperimentRequest, StartExperimentResponse, UpdateExperimentRequest, UpdateExperimentResponse } from "./experiments_pbjs";
6
+ import { ApplyExperimentWinnerRequest, ApplyExperimentWinnerResponse, CreateExperimentRequest, CreateExperimentResponse, DeleteExperimentRequest, DeleteExperimentResponse, EndExperimentRequest, EndExperimentResponse, ForceAssignExperimentRequest, ForceAssignExperimentResponse, GetAssignmentsRequest, GetAssignmentsResponse, GetExperimentByKeyRequest, GetExperimentByKeyResponse, GetExperimentRequest, GetExperimentResponse, GetExperimentStatsRequest, GetExperimentStatsResponse, ListExperimentDeclarationsRequest, ListExperimentDeclarationsResponse, ListExperimentsRequest, ListExperimentsResponse, PauseExperimentRequest, PauseExperimentResponse, PreviewExperimentWinnerRolloutRequest, PreviewExperimentWinnerRolloutResponse, RemoveExperimentAssignmentRequest, RemoveExperimentAssignmentResponse, ResolveExposureRequest, ResolveExposureResponse, ResumeExperimentRequest, ResumeExperimentResponse, RollbackExperimentRequest, RollbackExperimentResponse, StartExperimentRequest, StartExperimentResponse, UpdateExperimentRequest, UpdateExperimentResponse } from "./experiments_pbjs";
7
7
  import { MethodKind } from "@bufbuild/protobuf";
8
8
 
9
9
  /**
@@ -117,6 +117,24 @@ export const ExperimentsService = {
117
117
  O: ApplyExperimentWinnerResponse,
118
118
  kind: MethodKind.Unary,
119
119
  },
120
+ /**
121
+ * @generated from rpc experiments.v1.ExperimentsService.PreviewExperimentWinnerRollout
122
+ */
123
+ previewExperimentWinnerRollout: {
124
+ name: "PreviewExperimentWinnerRollout",
125
+ I: PreviewExperimentWinnerRolloutRequest,
126
+ O: PreviewExperimentWinnerRolloutResponse,
127
+ kind: MethodKind.Unary,
128
+ },
129
+ /**
130
+ * @generated from rpc experiments.v1.ExperimentsService.RollbackExperiment
131
+ */
132
+ rollbackExperiment: {
133
+ name: "RollbackExperiment",
134
+ I: RollbackExperimentRequest,
135
+ O: RollbackExperimentResponse,
136
+ kind: MethodKind.Unary,
137
+ },
120
138
  /**
121
139
  * Stats.
122
140
  *
@@ -149,12 +167,12 @@ export const ExperimentsService = {
149
167
  kind: MethodKind.Unary,
150
168
  },
151
169
  /**
152
- * @generated from rpc experiments.v1.ExperimentsService.GetCustomerAssignments
170
+ * @generated from rpc experiments.v1.ExperimentsService.GetAssignments
153
171
  */
154
- getCustomerAssignments: {
155
- name: "GetCustomerAssignments",
156
- I: GetCustomerAssignmentsRequest,
157
- O: GetCustomerAssignmentsResponse,
172
+ getAssignments: {
173
+ name: "GetAssignments",
174
+ I: GetAssignmentsRequest,
175
+ O: GetAssignmentsResponse,
158
176
  kind: MethodKind.Unary,
159
177
  },
160
178
  /**
@@ -168,6 +186,17 @@ export const ExperimentsService = {
168
186
  O: ResolveExposureResponse,
169
187
  kind: MethodKind.Unary,
170
188
  },
189
+ /**
190
+ * Declarations (for typed codegen on the public API).
191
+ *
192
+ * @generated from rpc experiments.v1.ExperimentsService.ListExperimentDeclarations
193
+ */
194
+ listExperimentDeclarations: {
195
+ name: "ListExperimentDeclarations",
196
+ I: ListExperimentDeclarationsRequest,
197
+ O: ListExperimentDeclarationsResponse,
198
+ kind: MethodKind.Unary,
199
+ },
171
200
  }
172
201
  };
173
202
 
@@ -216,9 +216,13 @@ export declare type ExperimentAssignment = Message<"experiments.v1.ExperimentAss
216
216
  experimentId: string;
217
217
 
218
218
  /**
219
- * @generated from field: string customer_id = 3;
219
+ * Customer identifier. Null for assignments created before the viewer
220
+ * signed in. Promoted from a viewer_key assignment on the first authed
221
+ * ResolveExposure call (see assignment_method = "promoted").
222
+ *
223
+ * @generated from field: optional string customer_id = 3;
220
224
  */
221
- customerId: string;
225
+ customerId?: string | undefined;
222
226
 
223
227
  /**
224
228
  * @generated from field: string variant_key = 4;
@@ -226,6 +230,11 @@ export declare type ExperimentAssignment = Message<"experiments.v1.ExperimentAss
226
230
  variantKey: string;
227
231
 
228
232
  /**
233
+ * How the assignment was created. One of: "hash" (deterministic
234
+ * bucketing on first exposure), "forced" (admin override via
235
+ * ForceAssignExperiment), "promoted" (viewer_key row was upgraded to
236
+ * a customer_id row when the viewer signed in mid-experiment).
237
+ *
229
238
  * @generated from field: string assignment_method = 5;
230
239
  */
231
240
  assignmentMethod: string;
@@ -235,6 +244,15 @@ export declare type ExperimentAssignment = Message<"experiments.v1.ExperimentAss
235
244
  */
236
245
  experimentKey: string;
237
246
 
247
+ /**
248
+ * Stable anonymous viewer identifier. Null once the assignment has
249
+ * been promoted to a customer_id, otherwise the cookie/localStorage
250
+ * value the frontend supplied at first exposure.
251
+ *
252
+ * @generated from field: optional string viewer_key = 7;
253
+ */
254
+ viewerKey?: string | undefined;
255
+
238
256
  /**
239
257
  * Ownership.
240
258
  *
@@ -276,6 +294,32 @@ export declare type ExperimentAssignment = Message<"experiments.v1.ExperimentAss
276
294
  */
277
295
  export declare const ExperimentAssignmentSchema: GenMessage<ExperimentAssignment>;
278
296
 
297
+ /**
298
+ * ExperimentDeclaration is the static shape of an experiment surfaced to
299
+ * public-API consumers for codegen. Includes all variant keys regardless
300
+ * of the experiment's runtime status, so frontends can compile against
301
+ * experiments that aren't yet running.
302
+ *
303
+ * @generated from message experiments.v1.ExperimentDeclaration
304
+ */
305
+ export declare type ExperimentDeclaration = Message<"experiments.v1.ExperimentDeclaration"> & {
306
+ /**
307
+ * @generated from field: string experiment_key = 1;
308
+ */
309
+ experimentKey: string;
310
+
311
+ /**
312
+ * @generated from field: repeated string variant_keys = 2;
313
+ */
314
+ variantKeys: string[];
315
+ };
316
+
317
+ /**
318
+ * Describes the message experiments.v1.ExperimentDeclaration.
319
+ * Use `create(ExperimentDeclarationSchema)` to create a new message.
320
+ */
321
+ export declare const ExperimentDeclarationSchema: GenMessage<ExperimentDeclaration>;
322
+
279
323
  /**
280
324
  * @generated from message experiments.v1.VariantStats
281
325
  */
@@ -791,13 +835,17 @@ export declare type GetExperimentStatsResponse = Message<"experiments.v1.GetExpe
791
835
  export declare const GetExperimentStatsResponseSchema: GenMessage<GetExperimentStatsResponse>;
792
836
 
793
837
  /**
838
+ * Admin override. Exactly one of customer_id or viewer_key must be set —
839
+ * matches the either-or shape used everywhere else on the experiments
840
+ * surface. Both empty is InvalidArgument.
841
+ *
794
842
  * @generated from message experiments.v1.ForceAssignExperimentRequest
795
843
  */
796
844
  export declare type ForceAssignExperimentRequest = Message<"experiments.v1.ForceAssignExperimentRequest"> & {
797
845
  /**
798
- * @generated from field: string customer_id = 1;
846
+ * @generated from field: optional string customer_id = 1;
799
847
  */
800
- customerId: string;
848
+ customerId?: string | undefined;
801
849
 
802
850
  /**
803
851
  * @generated from field: string experiment_id = 2;
@@ -808,6 +856,11 @@ export declare type ForceAssignExperimentRequest = Message<"experiments.v1.Force
808
856
  * @generated from field: string variant_key = 3;
809
857
  */
810
858
  variantKey: string;
859
+
860
+ /**
861
+ * @generated from field: optional string viewer_key = 4;
862
+ */
863
+ viewerKey?: string | undefined;
811
864
  };
812
865
 
813
866
  /**
@@ -833,18 +886,25 @@ export declare type ForceAssignExperimentResponse = Message<"experiments.v1.Forc
833
886
  export declare const ForceAssignExperimentResponseSchema: GenMessage<ForceAssignExperimentResponse>;
834
887
 
835
888
  /**
889
+ * Exactly one of customer_id or viewer_key must be set.
890
+ *
836
891
  * @generated from message experiments.v1.RemoveExperimentAssignmentRequest
837
892
  */
838
893
  export declare type RemoveExperimentAssignmentRequest = Message<"experiments.v1.RemoveExperimentAssignmentRequest"> & {
839
894
  /**
840
- * @generated from field: string customer_id = 1;
895
+ * @generated from field: optional string customer_id = 1;
841
896
  */
842
- customerId: string;
897
+ customerId?: string | undefined;
843
898
 
844
899
  /**
845
900
  * @generated from field: string experiment_id = 2;
846
901
  */
847
902
  experimentId: string;
903
+
904
+ /**
905
+ * @generated from field: optional string viewer_key = 3;
906
+ */
907
+ viewerKey?: string | undefined;
848
908
  };
849
909
 
850
910
  /**
@@ -898,6 +958,23 @@ export declare type ApplyExperimentWinnerResponse = Message<"experiments.v1.Appl
898
958
  * @generated from field: experiments.v1.Experiment experiment = 1;
899
959
  */
900
960
  experiment?: Experiment | undefined;
961
+
962
+ /**
963
+ * Number of parent records whose default variant was changed (or
964
+ * would have been, but was already the winner). Drives the admin
965
+ * confirmation copy.
966
+ *
967
+ * @generated from field: int32 affected_record_count = 2;
968
+ */
969
+ affectedRecordCount: number;
970
+
971
+ /**
972
+ * Number of variant rows whose experimentKey/variantKey metadata
973
+ * was cleared as part of the rollout sweep.
974
+ *
975
+ * @generated from field: int32 cleared_variant_count = 3;
976
+ */
977
+ clearedVariantCount: number;
901
978
  };
902
979
 
903
980
  /**
@@ -907,25 +984,164 @@ export declare type ApplyExperimentWinnerResponse = Message<"experiments.v1.Appl
907
984
  export declare const ApplyExperimentWinnerResponseSchema: GenMessage<ApplyExperimentWinnerResponse>;
908
985
 
909
986
  /**
910
- * @generated from message experiments.v1.GetCustomerAssignmentsRequest
987
+ * Read-only dry-run for the admin confirmation dialog. Returns what
988
+ * records would be affected by ApplyExperimentWinner without making
989
+ * any changes. Same validation surface as ApplyExperimentWinner so
990
+ * the UI can surface "winner key not declared on this experiment"
991
+ * before the user clicks through.
992
+ *
993
+ * @generated from message experiments.v1.PreviewExperimentWinnerRolloutRequest
994
+ */
995
+ export declare type PreviewExperimentWinnerRolloutRequest = Message<"experiments.v1.PreviewExperimentWinnerRolloutRequest"> & {
996
+ /**
997
+ * @generated from field: string experiment_id = 1;
998
+ */
999
+ experimentId: string;
1000
+
1001
+ /**
1002
+ * @generated from field: string winner_variant_key = 2;
1003
+ */
1004
+ winnerVariantKey: string;
1005
+ };
1006
+
1007
+ /**
1008
+ * Describes the message experiments.v1.PreviewExperimentWinnerRolloutRequest.
1009
+ * Use `create(PreviewExperimentWinnerRolloutRequestSchema)` to create a new message.
1010
+ */
1011
+ export declare const PreviewExperimentWinnerRolloutRequestSchema: GenMessage<PreviewExperimentWinnerRolloutRequest>;
1012
+
1013
+ /**
1014
+ * @generated from message experiments.v1.AffectedRecord
1015
+ */
1016
+ export declare type AffectedRecord = Message<"experiments.v1.AffectedRecord"> & {
1017
+ /**
1018
+ * @generated from field: string record_id = 1;
1019
+ */
1020
+ recordId: string;
1021
+
1022
+ /**
1023
+ * Currently-set defaultVariantId, or empty when none.
1024
+ *
1025
+ * @generated from field: string current_default_variant_id = 2;
1026
+ */
1027
+ currentDefaultVariantId: string;
1028
+
1029
+ /**
1030
+ * Variant id that would become default after rollout, or empty if
1031
+ * the winner is "control" (no variant change — only metadata cleanup).
1032
+ *
1033
+ * @generated from field: string new_default_variant_id = 3;
1034
+ */
1035
+ newDefaultVariantId: string;
1036
+ };
1037
+
1038
+ /**
1039
+ * Describes the message experiments.v1.AffectedRecord.
1040
+ * Use `create(AffectedRecordSchema)` to create a new message.
911
1041
  */
912
- export declare type GetCustomerAssignmentsRequest = Message<"experiments.v1.GetCustomerAssignmentsRequest"> & {
1042
+ export declare const AffectedRecordSchema: GenMessage<AffectedRecord>;
1043
+
1044
+ /**
1045
+ * @generated from message experiments.v1.PreviewExperimentWinnerRolloutResponse
1046
+ */
1047
+ export declare type PreviewExperimentWinnerRolloutResponse = Message<"experiments.v1.PreviewExperimentWinnerRolloutResponse"> & {
1048
+ /**
1049
+ * @generated from field: repeated experiments.v1.AffectedRecord affected_records = 1;
1050
+ */
1051
+ affectedRecords: AffectedRecord[];
1052
+
913
1053
  /**
914
- * @generated from field: string customer_id = 1;
1054
+ * Cohort variants that would have their experimentKey/variantKey
1055
+ * metadata cleared (always == affected_records cohort + losers).
1056
+ *
1057
+ * @generated from field: int32 cleared_variant_count = 2;
915
1058
  */
916
- customerId: string;
1059
+ clearedVariantCount: number;
917
1060
  };
918
1061
 
919
1062
  /**
920
- * Describes the message experiments.v1.GetCustomerAssignmentsRequest.
921
- * Use `create(GetCustomerAssignmentsRequestSchema)` to create a new message.
1063
+ * Describes the message experiments.v1.PreviewExperimentWinnerRolloutResponse.
1064
+ * Use `create(PreviewExperimentWinnerRolloutResponseSchema)` to create a new message.
922
1065
  */
923
- export declare const GetCustomerAssignmentsRequestSchema: GenMessage<GetCustomerAssignmentsRequest>;
1066
+ export declare const PreviewExperimentWinnerRolloutResponseSchema: GenMessage<PreviewExperimentWinnerRolloutResponse>;
924
1067
 
925
1068
  /**
926
- * @generated from message experiments.v1.GetCustomerAssignmentsResponse
1069
+ * Restores the snapshot captured by the most recent
1070
+ * ApplyExperimentWinner call: re-applies previous default variants on
1071
+ * affected records, re-binds cohort variants to their old experimentKey/
1072
+ * variantKey metadata, transitions the experiment back to PAUSED so the
1073
+ * admin can decide whether to resume or end again.
1074
+ *
1075
+ * @generated from message experiments.v1.RollbackExperimentRequest
927
1076
  */
928
- export declare type GetCustomerAssignmentsResponse = Message<"experiments.v1.GetCustomerAssignmentsResponse"> & {
1077
+ export declare type RollbackExperimentRequest = Message<"experiments.v1.RollbackExperimentRequest"> & {
1078
+ /**
1079
+ * @generated from field: string experiment_id = 1;
1080
+ */
1081
+ experimentId: string;
1082
+ };
1083
+
1084
+ /**
1085
+ * Describes the message experiments.v1.RollbackExperimentRequest.
1086
+ * Use `create(RollbackExperimentRequestSchema)` to create a new message.
1087
+ */
1088
+ export declare const RollbackExperimentRequestSchema: GenMessage<RollbackExperimentRequest>;
1089
+
1090
+ /**
1091
+ * @generated from message experiments.v1.RollbackExperimentResponse
1092
+ */
1093
+ export declare type RollbackExperimentResponse = Message<"experiments.v1.RollbackExperimentResponse"> & {
1094
+ /**
1095
+ * @generated from field: experiments.v1.Experiment experiment = 1;
1096
+ */
1097
+ experiment?: Experiment | undefined;
1098
+
1099
+ /**
1100
+ * @generated from field: int32 restored_record_count = 2;
1101
+ */
1102
+ restoredRecordCount: number;
1103
+
1104
+ /**
1105
+ * @generated from field: int32 restored_variant_count = 3;
1106
+ */
1107
+ restoredVariantCount: number;
1108
+ };
1109
+
1110
+ /**
1111
+ * Describes the message experiments.v1.RollbackExperimentResponse.
1112
+ * Use `create(RollbackExperimentResponseSchema)` to create a new message.
1113
+ */
1114
+ export declare const RollbackExperimentResponseSchema: GenMessage<RollbackExperimentResponse>;
1115
+
1116
+ /**
1117
+ * Reads assignment rows for the given identity. Exactly one of customer_id
1118
+ * or viewer_key must be set — symmetric with RecordConversionInput. Both
1119
+ * empty or both set is InvalidArgument.
1120
+ *
1121
+ * @generated from message experiments.v1.GetAssignmentsRequest
1122
+ */
1123
+ export declare type GetAssignmentsRequest = Message<"experiments.v1.GetAssignmentsRequest"> & {
1124
+ /**
1125
+ * @generated from field: optional string customer_id = 1;
1126
+ */
1127
+ customerId?: string | undefined;
1128
+
1129
+ /**
1130
+ * @generated from field: optional string viewer_key = 2;
1131
+ */
1132
+ viewerKey?: string | undefined;
1133
+ };
1134
+
1135
+ /**
1136
+ * Describes the message experiments.v1.GetAssignmentsRequest.
1137
+ * Use `create(GetAssignmentsRequestSchema)` to create a new message.
1138
+ */
1139
+ export declare const GetAssignmentsRequestSchema: GenMessage<GetAssignmentsRequest>;
1140
+
1141
+ /**
1142
+ * @generated from message experiments.v1.GetAssignmentsResponse
1143
+ */
1144
+ export declare type GetAssignmentsResponse = Message<"experiments.v1.GetAssignmentsResponse"> & {
929
1145
  /**
930
1146
  * @generated from field: repeated experiments.v1.ExperimentAssignment assignments = 1;
931
1147
  */
@@ -933,17 +1149,61 @@ export declare type GetCustomerAssignmentsResponse = Message<"experiments.v1.Get
933
1149
  };
934
1150
 
935
1151
  /**
936
- * Describes the message experiments.v1.GetCustomerAssignmentsResponse.
937
- * Use `create(GetCustomerAssignmentsResponseSchema)` to create a new message.
1152
+ * Describes the message experiments.v1.GetAssignmentsResponse.
1153
+ * Use `create(GetAssignmentsResponseSchema)` to create a new message.
938
1154
  */
939
- export declare const GetCustomerAssignmentsResponseSchema: GenMessage<GetCustomerAssignmentsResponse>;
1155
+ export declare const GetAssignmentsResponseSchema: GenMessage<GetAssignmentsResponse>;
940
1156
 
941
1157
  /**
942
- * Resolves the variant a viewer sees for a given experiment. Uses stateless
943
- * deterministic hash bucketing over experiment.variants[].percent no DB
944
- * writes, no persistence. Same (experiment_key, viewer_key) always returns
945
- * the same variant. customer_id is preferred when available (for cross-device
946
- * consistency); viewer_key is the anonymous fallback.
1158
+ * Returns the static declaration shape (key + variant keys) for every
1159
+ * experiment in the project, regardless of runtime status. Used by the
1160
+ * public-API codegen pipeline to emit stable ExperimentKey /
1161
+ * ExperimentVariantKey enums that don't drift across environments based
1162
+ * on what's currently running. Frontends that want to enumerate declared
1163
+ * experiments at runtime can also read this.
1164
+ *
1165
+ * @generated from message experiments.v1.ListExperimentDeclarationsRequest
1166
+ */
1167
+ export declare type ListExperimentDeclarationsRequest = Message<"experiments.v1.ListExperimentDeclarationsRequest"> & {
1168
+ };
1169
+
1170
+ /**
1171
+ * Describes the message experiments.v1.ListExperimentDeclarationsRequest.
1172
+ * Use `create(ListExperimentDeclarationsRequestSchema)` to create a new message.
1173
+ */
1174
+ export declare const ListExperimentDeclarationsRequestSchema: GenMessage<ListExperimentDeclarationsRequest>;
1175
+
1176
+ /**
1177
+ * @generated from message experiments.v1.ListExperimentDeclarationsResponse
1178
+ */
1179
+ export declare type ListExperimentDeclarationsResponse = Message<"experiments.v1.ListExperimentDeclarationsResponse"> & {
1180
+ /**
1181
+ * @generated from field: repeated experiments.v1.ExperimentDeclaration declarations = 1;
1182
+ */
1183
+ declarations: ExperimentDeclaration[];
1184
+ };
1185
+
1186
+ /**
1187
+ * Describes the message experiments.v1.ListExperimentDeclarationsResponse.
1188
+ * Use `create(ListExperimentDeclarationsResponseSchema)` to create a new message.
1189
+ */
1190
+ export declare const ListExperimentDeclarationsResponseSchema: GenMessage<ListExperimentDeclarationsResponse>;
1191
+
1192
+ /**
1193
+ * Resolves the variant a viewer sees for a given experiment. Persisted
1194
+ * (D2b): the first call for a given (experiment, identity) buckets via
1195
+ * deterministic FNV-1a hash over (experiment_id, identity), writes a
1196
+ * row to experiment_assignments, and returns the chosen variant. All
1197
+ * subsequent calls return the persisted variant — sticky across traffic
1198
+ * allocation changes, percent reallocations, and pause/resume cycles.
1199
+ *
1200
+ * Identity rule: pass exactly one of customer_id or viewer_key, OR pass
1201
+ * both for the anon→customer hand-off (server promotes the existing
1202
+ * viewer row to a customer row, preserving the variant; or, if a
1203
+ * customer row already exists, keeps the customer row and drops the
1204
+ * viewer row). Both empty is InvalidArgument. There is no
1205
+ * "customer-preferred-with-fallback" — the caller asks for what they
1206
+ * have.
947
1207
  *
948
1208
  * @generated from message experiments.v1.ResolveExposureRequest
949
1209
  */
@@ -990,12 +1250,30 @@ export declare type ResolveExposureResponse = Message<"experiments.v1.ResolveExp
990
1250
  isControl: boolean;
991
1251
 
992
1252
  /**
993
- * False when the experiment is not running (draft, paused, ended, or
994
- * outside its date window). In that case variant_key is empty.
1253
+ * False when the experiment is not RUNNING (draft, paused, ended) or
1254
+ * when the current time is outside its [start_date, end_date] window.
1255
+ * No row is written in that case and variant_key is empty.
995
1256
  *
996
1257
  * @generated from field: bool is_exposed = 4;
997
1258
  */
998
1259
  isExposed: boolean;
1260
+
1261
+ /**
1262
+ * "hash" for the first bucketing, "forced" if a ForceAssignExperiment
1263
+ * row was hit, "promoted" if the call promoted a viewer row to a
1264
+ * customer row.
1265
+ *
1266
+ * @generated from field: string assignment_method = 5;
1267
+ */
1268
+ assignmentMethod: string;
1269
+
1270
+ /**
1271
+ * True if this call wrote (or promoted) the assignment row. Useful for
1272
+ * analytics: distinguish first-exposure from subsequent reads.
1273
+ *
1274
+ * @generated from field: bool is_new_assignment = 6;
1275
+ */
1276
+ isNewAssignment: boolean;
999
1277
  };
1000
1278
 
1001
1279
  /**
@@ -1137,6 +1415,22 @@ export declare const ExperimentsService: GenService<{
1137
1415
  input: typeof ApplyExperimentWinnerRequestSchema;
1138
1416
  output: typeof ApplyExperimentWinnerResponseSchema;
1139
1417
  },
1418
+ /**
1419
+ * @generated from rpc experiments.v1.ExperimentsService.PreviewExperimentWinnerRollout
1420
+ */
1421
+ previewExperimentWinnerRollout: {
1422
+ methodKind: "unary";
1423
+ input: typeof PreviewExperimentWinnerRolloutRequestSchema;
1424
+ output: typeof PreviewExperimentWinnerRolloutResponseSchema;
1425
+ },
1426
+ /**
1427
+ * @generated from rpc experiments.v1.ExperimentsService.RollbackExperiment
1428
+ */
1429
+ rollbackExperiment: {
1430
+ methodKind: "unary";
1431
+ input: typeof RollbackExperimentRequestSchema;
1432
+ output: typeof RollbackExperimentResponseSchema;
1433
+ },
1140
1434
  /**
1141
1435
  * Stats.
1142
1436
  *
@@ -1166,12 +1460,12 @@ export declare const ExperimentsService: GenService<{
1166
1460
  output: typeof RemoveExperimentAssignmentResponseSchema;
1167
1461
  },
1168
1462
  /**
1169
- * @generated from rpc experiments.v1.ExperimentsService.GetCustomerAssignments
1463
+ * @generated from rpc experiments.v1.ExperimentsService.GetAssignments
1170
1464
  */
1171
- getCustomerAssignments: {
1465
+ getAssignments: {
1172
1466
  methodKind: "unary";
1173
- input: typeof GetCustomerAssignmentsRequestSchema;
1174
- output: typeof GetCustomerAssignmentsResponseSchema;
1467
+ input: typeof GetAssignmentsRequestSchema;
1468
+ output: typeof GetAssignmentsResponseSchema;
1175
1469
  },
1176
1470
  /**
1177
1471
  * Exposure.
@@ -1183,5 +1477,15 @@ export declare const ExperimentsService: GenService<{
1183
1477
  input: typeof ResolveExposureRequestSchema;
1184
1478
  output: typeof ResolveExposureResponseSchema;
1185
1479
  },
1480
+ /**
1481
+ * Declarations (for typed codegen on the public API).
1482
+ *
1483
+ * @generated from rpc experiments.v1.ExperimentsService.ListExperimentDeclarations
1484
+ */
1485
+ listExperimentDeclarations: {
1486
+ methodKind: "unary";
1487
+ input: typeof ListExperimentDeclarationsRequestSchema;
1488
+ output: typeof ListExperimentDeclarationsResponseSchema;
1489
+ },
1186
1490
  }>;
1187
1491
 
@@ -10,7 +10,7 @@ import { file_expressions_v1_expressions } from "../../expressions/v1/expression
10
10
  * Describes the file experiments/v1/experiments.proto.
11
11
  */
12
12
  export const file_experiments_v1_experiments = /*@__PURE__*/
13
- fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnIpUGCgpFeHBlcmltZW50EgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRuYW1lGAMgASgJEhgKC2Rlc2NyaXB0aW9uGAQgASgJSACIAQESMAoGc3RhdHVzGAogASgOMiAuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXR1cxIRCglpc19hY3RpdmUYCyABKAgSNgoJdGFyZ2V0aW5nGBQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZxIXCg9jb250cm9sX3BlcmNlbnQYFSABKAUSMwoIdmFyaWFudHMYFiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIeChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGBcgASgJEjMKCnN0YXJ0X2RhdGUYHiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESMQoIZW5kX2RhdGUYHyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESLQoHbWV0cmljcxgjIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIrCgVnb2FscxgkIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBIgBARIRCgl0ZW5hbnRfaWQYKCABKAkSEgoKcHJvamVjdF9pZBgpIAEoCRIXCgpjcmVhdGVkX2J5GC0gASgJSAWIAQESFwoKdXBkYXRlZF9ieRguIAEoCUgGiAEBEi4KCmNyZWF0ZWRfYXQYMiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYMyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9kZXNjcmlwdGlvbkINCgtfc3RhcnRfZGF0ZUILCglfZW5kX2RhdGVCCgoIX21ldHJpY3NCCAoGX2dvYWxzQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5IpcDChRFeHBlcmltZW50QXNzaWdubWVudBIKCgJpZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhMKC2N1c3RvbWVyX2lkGAMgASgJEhMKC3ZhcmlhbnRfa2V5GAQgASgJEhkKEWFzc2lnbm1lbnRfbWV0aG9kGAUgASgJEhYKDmV4cGVyaW1lbnRfa2V5GAYgASgJEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEi8KC2Fzc2lnbmVkX2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1maXJzdF9zZWVuX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmV4cGlyZXNfYXQYFyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQFCDQoLX2V4cGlyZXNfYXQipwEKDFZhcmlhbnRTdGF0cxITCgt2YXJpYW50X2tleRgBIAEoCRIYChBhc3NpZ25tZW50X2NvdW50GAIgASgFEhcKD2NvbnZlcnNpb25fcmF0ZRgDIAEoARI4ChJhZGRpdGlvbmFsX21ldHJpY3MYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQFCFQoTX2FkZGl0aW9uYWxfbWV0cmljcyJhCg9FeHBlcmltZW50U3RhdHMSMwoNdmFyaWFudF9zdGF0cxgBIAMoCzIcLmV4cGVyaW1lbnRzLnYxLlZhcmlhbnRTdGF0cxIZChF0b3RhbF9hc3NpZ25tZW50cxgCIAEoBSKLBAoXQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QSCwoDa2V5GAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARI7Cgl0YXJnZXRpbmcYBCABKAsyIy5leHBlcmltZW50cy52MS5FeHBlcmltZW50VGFyZ2V0aW5nSAGIAQESHAoPY29udHJvbF9wZXJjZW50GAUgASgFSAKIAQESMwoIdmFyaWFudHMYBiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIzCgpzdGFydF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjEKCGVuZF9kYXRlGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEiMKFmFzc2lnbm1lbnRfcGVyc2lzdGVuY2UYCSABKAlIBYgBARIrCgVnb2FscxgKIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBogBAUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZUIICgZfZ29hbHMiSgoYQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50IiIKFEdldEV4cGVyaW1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJIkcKFUdldEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIoChlHZXRFeHBlcmltZW50QnlLZXlSZXF1ZXN0EgsKA2tleRgBIAEoCSJMChpHZXRFeHBlcmltZW50QnlLZXlSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCKfAQoWTGlzdEV4cGVyaW1lbnRzUmVxdWVzdBI1CgZzdGF0dXMYASABKA4yIC5leHBlcmltZW50cy52MS5FeHBlcmltZW50U3RhdHVzSACIAQESFgoJaXNfYWN0aXZlGAIgASgISAGIAQESDQoFbGltaXQYCiABKAUSDgoGb2Zmc2V0GAsgASgFQgkKB19zdGF0dXNCDAoKX2lzX2FjdGl2ZSJZChdMaXN0RXhwZXJpbWVudHNSZXNwb25zZRIvCgtleHBlcmltZW50cxgBIAMoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQSDQoFdG90YWwYAiABKAUimAQKF1VwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgDIAEoCUgBiAEBEjsKCXRhcmdldGluZxgEIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmdIAogBARIcCg9jb250cm9sX3BlcmNlbnQYBSABKAVIA4gBARIzCgh2YXJpYW50cxgGIAMoCzIhLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRWYXJpYW50EjMKCnN0YXJ0X2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESMQoIZW5kX2RhdGUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESIwoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgJIAEoCUgGiAEBEisKBWdvYWxzGAogASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgHiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfdGFyZ2V0aW5nQhIKEF9jb250cm9sX3BlcmNlbnRCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQhkKF19hc3NpZ25tZW50X3BlcnNpc3RlbmNlQggKBl9nb2FscyJKChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiJQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiKwoYRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiLwoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ii8KFlBhdXNlRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdQYXVzZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIwChdSZXN1bWVFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkoKGFJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCItChRFbmRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkcKFUVuZEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIyChlHZXRFeHBlcmltZW50U3RhdHNSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiTAoaR2V0RXhwZXJpbWVudFN0YXRzUmVzcG9uc2USLgoFc3RhdHMYASABKAsyHy5leHBlcmltZW50cy52MS5FeHBlcmltZW50U3RhdHMiXwocRm9yY2VBc3NpZ25FeHBlcmltZW50UmVxdWVzdBITCgtjdXN0b21lcl9pZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhMKC3ZhcmlhbnRfa2V5GAMgASgJIlkKHUZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEjgKCmFzc2lnbm1lbnQYASABKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCJPCiFSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlcXVlc3QSEwoLY3VzdG9tZXJfaWQYASABKAkSFQoNZXhwZXJpbWVudF9pZBgCIAEoCSI1CiJSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiUQocQXBwbHlFeHBlcmltZW50V2lubmVyUmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEhoKEndpbm5lcl92YXJpYW50X2tleRgCIAEoCSJPCh1BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCI0Ch1HZXRDdXN0b21lckFzc2lnbm1lbnRzUmVxdWVzdBITCgtjdXN0b21lcl9pZBgBIAEoCSJbCh5HZXRDdXN0b21lckFzc2lnbm1lbnRzUmVzcG9uc2USOQoLYXNzaWdubWVudHMYASADKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCKCAQoWUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBIWCg5leHBlcmltZW50X2tleRgBIAEoCRIYCgtjdXN0b21lcl9pZBgCIAEoCUgAiAEBEhcKCnZpZXdlcl9rZXkYAyABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkibgoXUmVzb2x2ZUV4cG9zdXJlUmVzcG9uc2USFgoOZXhwZXJpbWVudF9rZXkYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEgoKaXNfY29udHJvbBgDIAEoCBISCgppc19leHBvc2VkGAQgASgIKrABChBFeHBlcmltZW50U3RhdHVzEiEKHUVYUEVSSU1FTlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXRVhQRVJJTUVOVF9TVEFUVVNfRFJBRlQQARIdChlFWFBFUklNRU5UX1NUQVRVU19SVU5OSU5HEAISHAoYRVhQRVJJTUVOVF9TVEFUVVNfUEFVU0VEEAMSHwobRVhQRVJJTUVOVF9TVEFUVVNfQ09NUExFVEVEEAQywQ0KEkV4cGVyaW1lbnRzU2VydmljZRJcCg1HZXRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50UmVzcG9uc2USawoSR2V0RXhwZXJpbWVudEJ5S2V5EikuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudEJ5S2V5UmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRCeUtleVJlc3BvbnNlEmIKD0xpc3RFeHBlcmltZW50cxImLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50c1JlcXVlc3QaJy5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudHNSZXNwb25zZRJlChBDcmVhdGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5DcmVhdGVFeHBlcmltZW50UmVzcG9uc2USZQoQVXBkYXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLlVwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlEmUKEERlbGV0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5EZWxldGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLkRlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZRJiCg9TdGFydEV4cGVyaW1lbnQSJi5leHBlcmltZW50cy52MS5TdGFydEV4cGVyaW1lbnRSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuU3RhcnRFeHBlcmltZW50UmVzcG9uc2USYgoPUGF1c2VFeHBlcmltZW50EiYuZXhwZXJpbWVudHMudjEuUGF1c2VFeHBlcmltZW50UmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlBhdXNlRXhwZXJpbWVudFJlc3BvbnNlEmUKEFJlc3VtZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5SZXN1bWVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLlJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRJcCg1FbmRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuRW5kRXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5FbmRFeHBlcmltZW50UmVzcG9uc2USdAoVQXBwbHlFeHBlcmltZW50V2lubmVyEiwuZXhwZXJpbWVudHMudjEuQXBwbHlFeHBlcmltZW50V2lubmVyUmVxdWVzdBotLmV4cGVyaW1lbnRzLnYxLkFwcGx5RXhwZXJpbWVudFdpbm5lclJlc3BvbnNlEmsKEkdldEV4cGVyaW1lbnRTdGF0cxIpLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRTdGF0c1JlcXVlc3QaKi5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50U3RhdHNSZXNwb25zZRJ0ChVGb3JjZUFzc2lnbkV4cGVyaW1lbnQSLC5leHBlcmltZW50cy52MS5Gb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0Gi0uZXhwZXJpbWVudHMudjEuRm9yY2VBc3NpZ25FeHBlcmltZW50UmVzcG9uc2USgwEKGlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50EjEuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0GjIuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXNwb25zZRJ3ChZHZXRDdXN0b21lckFzc2lnbm1lbnRzEi0uZXhwZXJpbWVudHMudjEuR2V0Q3VzdG9tZXJBc3NpZ25tZW50c1JlcXVlc3QaLi5leHBlcmltZW50cy52MS5HZXRDdXN0b21lckFzc2lnbm1lbnRzUmVzcG9uc2USYgoPUmVzb2x2ZUV4cG9zdXJlEiYuZXhwZXJpbWVudHMudjEuUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlJlc29sdmVFeHBvc3VyZVJlc3BvbnNlQkNaQWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9leHBlcmltZW50cy92MTtleHBlcmltZW50c3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
13
+ fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnIpUGCgpFeHBlcmltZW50EgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRuYW1lGAMgASgJEhgKC2Rlc2NyaXB0aW9uGAQgASgJSACIAQESMAoGc3RhdHVzGAogASgOMiAuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXR1cxIRCglpc19hY3RpdmUYCyABKAgSNgoJdGFyZ2V0aW5nGBQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZxIXCg9jb250cm9sX3BlcmNlbnQYFSABKAUSMwoIdmFyaWFudHMYFiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIeChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGBcgASgJEjMKCnN0YXJ0X2RhdGUYHiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESMQoIZW5kX2RhdGUYHyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESLQoHbWV0cmljcxgjIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIrCgVnb2FscxgkIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBIgBARIRCgl0ZW5hbnRfaWQYKCABKAkSEgoKcHJvamVjdF9pZBgpIAEoCRIXCgpjcmVhdGVkX2J5GC0gASgJSAWIAQESFwoKdXBkYXRlZF9ieRguIAEoCUgGiAEBEi4KCmNyZWF0ZWRfYXQYMiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYMyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9kZXNjcmlwdGlvbkINCgtfc3RhcnRfZGF0ZUILCglfZW5kX2RhdGVCCgoIX21ldHJpY3NCCAoGX2dvYWxzQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5ItQDChRFeHBlcmltZW50QXNzaWdubWVudBIKCgJpZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhgKC2N1c3RvbWVyX2lkGAMgASgJSACIAQESEwoLdmFyaWFudF9rZXkYBCABKAkSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSFgoOZXhwZXJpbWVudF9rZXkYBiABKAkSFwoKdmlld2VyX2tleRgHIAEoCUgBiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEi8KC2Fzc2lnbmVkX2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1maXJzdF9zZWVuX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmV4cGlyZXNfYXQYFyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5Qg0KC19leHBpcmVzX2F0IkUKFUV4cGVyaW1lbnREZWNsYXJhdGlvbhIWCg5leHBlcmltZW50X2tleRgBIAEoCRIUCgx2YXJpYW50X2tleXMYAiADKAkipwEKDFZhcmlhbnRTdGF0cxITCgt2YXJpYW50X2tleRgBIAEoCRIYChBhc3NpZ25tZW50X2NvdW50GAIgASgFEhcKD2NvbnZlcnNpb25fcmF0ZRgDIAEoARI4ChJhZGRpdGlvbmFsX21ldHJpY3MYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQFCFQoTX2FkZGl0aW9uYWxfbWV0cmljcyJhCg9FeHBlcmltZW50U3RhdHMSMwoNdmFyaWFudF9zdGF0cxgBIAMoCzIcLmV4cGVyaW1lbnRzLnYxLlZhcmlhbnRTdGF0cxIZChF0b3RhbF9hc3NpZ25tZW50cxgCIAEoBSKLBAoXQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QSCwoDa2V5GAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARI7Cgl0YXJnZXRpbmcYBCABKAsyIy5leHBlcmltZW50cy52MS5FeHBlcmltZW50VGFyZ2V0aW5nSAGIAQESHAoPY29udHJvbF9wZXJjZW50GAUgASgFSAKIAQESMwoIdmFyaWFudHMYBiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIzCgpzdGFydF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjEKCGVuZF9kYXRlGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEiMKFmFzc2lnbm1lbnRfcGVyc2lzdGVuY2UYCSABKAlIBYgBARIrCgVnb2FscxgKIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBogBAUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZUIICgZfZ29hbHMiSgoYQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50IiIKFEdldEV4cGVyaW1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJIkcKFUdldEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIoChlHZXRFeHBlcmltZW50QnlLZXlSZXF1ZXN0EgsKA2tleRgBIAEoCSJMChpHZXRFeHBlcmltZW50QnlLZXlSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCKfAQoWTGlzdEV4cGVyaW1lbnRzUmVxdWVzdBI1CgZzdGF0dXMYASABKA4yIC5leHBlcmltZW50cy52MS5FeHBlcmltZW50U3RhdHVzSACIAQESFgoJaXNfYWN0aXZlGAIgASgISAGIAQESDQoFbGltaXQYCiABKAUSDgoGb2Zmc2V0GAsgASgFQgkKB19zdGF0dXNCDAoKX2lzX2FjdGl2ZSJZChdMaXN0RXhwZXJpbWVudHNSZXNwb25zZRIvCgtleHBlcmltZW50cxgBIAMoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQSDQoFdG90YWwYAiABKAUimAQKF1VwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgDIAEoCUgBiAEBEjsKCXRhcmdldGluZxgEIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmdIAogBARIcCg9jb250cm9sX3BlcmNlbnQYBSABKAVIA4gBARIzCgh2YXJpYW50cxgGIAMoCzIhLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRWYXJpYW50EjMKCnN0YXJ0X2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESMQoIZW5kX2RhdGUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESIwoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgJIAEoCUgGiAEBEisKBWdvYWxzGAogASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgHiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfdGFyZ2V0aW5nQhIKEF9jb250cm9sX3BlcmNlbnRCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQhkKF19hc3NpZ25tZW50X3BlcnNpc3RlbmNlQggKBl9nb2FscyJKChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiJQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiKwoYRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiLwoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ii8KFlBhdXNlRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdQYXVzZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIwChdSZXN1bWVFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkoKGFJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCItChRFbmRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkcKFUVuZEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIyChlHZXRFeHBlcmltZW50U3RhdHNSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiTAoaR2V0RXhwZXJpbWVudFN0YXRzUmVzcG9uc2USLgoFc3RhdHMYASABKAsyHy5leHBlcmltZW50cy52MS5FeHBlcmltZW50U3RhdHMinAEKHEZvcmNlQXNzaWduRXhwZXJpbWVudFJlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIVCg1leHBlcmltZW50X2lkGAIgASgJEhMKC3ZhcmlhbnRfa2V5GAMgASgJEhcKCnZpZXdlcl9rZXkYBCABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiWQodRm9yY2VBc3NpZ25FeHBlcmltZW50UmVzcG9uc2USOAoKYXNzaWdubWVudBgBIAEoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRBc3NpZ25tZW50IowBCiFSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIVCg1leHBlcmltZW50X2lkGAIgASgJEhcKCnZpZXdlcl9rZXkYAyABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiNQoiUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIlEKHEFwcGx5RXhwZXJpbWVudFdpbm5lclJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCRIaChJ3aW5uZXJfdmFyaWFudF9rZXkYAiABKAkijQEKHUFwcGx5RXhwZXJpbWVudFdpbm5lclJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eh0KFWFmZmVjdGVkX3JlY29yZF9jb3VudBgCIAEoBRIdChVjbGVhcmVkX3ZhcmlhbnRfY291bnQYAyABKAUiWgolUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEhoKEndpbm5lcl92YXJpYW50X2tleRgCIAEoCSJnCg5BZmZlY3RlZFJlY29yZBIRCglyZWNvcmRfaWQYASABKAkSIgoaY3VycmVudF9kZWZhdWx0X3ZhcmlhbnRfaWQYAiABKAkSHgoWbmV3X2RlZmF1bHRfdmFyaWFudF9pZBgDIAEoCSKBAQomUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVzcG9uc2USOAoQYWZmZWN0ZWRfcmVjb3JkcxgBIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkFmZmVjdGVkUmVjb3JkEh0KFWNsZWFyZWRfdmFyaWFudF9jb3VudBgCIAEoBSIyChlSb2xsYmFja0V4cGVyaW1lbnRSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiiwEKGlJvbGxiYWNrRXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eh0KFXJlc3RvcmVkX3JlY29yZF9jb3VudBgCIAEoBRIeChZyZXN0b3JlZF92YXJpYW50X2NvdW50GAMgASgFImkKFUdldEFzc2lnbm1lbnRzUmVxdWVzdBIYCgtjdXN0b21lcl9pZBgBIAEoCUgAiAEBEhcKCnZpZXdlcl9rZXkYAiABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiUwoWR2V0QXNzaWdubWVudHNSZXNwb25zZRI5Cgthc3NpZ25tZW50cxgBIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRBc3NpZ25tZW50IiMKIUxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVxdWVzdCJhCiJMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1Jlc3BvbnNlEjsKDGRlY2xhcmF0aW9ucxgBIAMoCzIlLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnREZWNsYXJhdGlvbiKCAQoWUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBIWCg5leHBlcmltZW50X2tleRgBIAEoCRIYCgtjdXN0b21lcl9pZBgCIAEoCUgAiAEBEhcKCnZpZXdlcl9rZXkYAyABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkipAEKF1Jlc29sdmVFeHBvc3VyZVJlc3BvbnNlEhYKDmV4cGVyaW1lbnRfa2V5GAEgASgJEhMKC3ZhcmlhbnRfa2V5GAIgASgJEhIKCmlzX2NvbnRyb2wYAyABKAgSEgoKaXNfZXhwb3NlZBgEIAEoCBIZChFhc3NpZ25tZW50X21ldGhvZBgFIAEoCRIZChFpc19uZXdfYXNzaWdubWVudBgGIAEoCCqwAQoQRXhwZXJpbWVudFN0YXR1cxIhCh1FWFBFUklNRU5UX1NUQVRVU19VTlNQRUNJRklFRBAAEhsKF0VYUEVSSU1FTlRfU1RBVFVTX0RSQUZUEAESHQoZRVhQRVJJTUVOVF9TVEFUVVNfUlVOTklORxACEhwKGEVYUEVSSU1FTlRfU1RBVFVTX1BBVVNFRBADEh8KG0VYUEVSSU1FTlRfU1RBVFVTX0NPTVBMRVRFRBAEMq4QChJFeHBlcmltZW50c1NlcnZpY2USXAoNR2V0RXhwZXJpbWVudBIkLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRSZXF1ZXN0GiUuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFJlc3BvbnNlEmsKEkdldEV4cGVyaW1lbnRCeUtleRIpLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRCeUtleVJlcXVlc3QaKi5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50QnlLZXlSZXNwb25zZRJiCg9MaXN0RXhwZXJpbWVudHMSJi5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudHNSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuTGlzdEV4cGVyaW1lbnRzUmVzcG9uc2USZQoQQ3JlYXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLkNyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlEmUKEFVwZGF0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5VcGRhdGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLlVwZGF0ZUV4cGVyaW1lbnRSZXNwb25zZRJlChBEZWxldGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5EZWxldGVFeHBlcmltZW50UmVzcG9uc2USYgoPU3RhcnRFeHBlcmltZW50EiYuZXhwZXJpbWVudHMudjEuU3RhcnRFeHBlcmltZW50UmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlN0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEmIKD1BhdXNlRXhwZXJpbWVudBImLmV4cGVyaW1lbnRzLnYxLlBhdXNlRXhwZXJpbWVudFJlcXVlc3QaJy5leHBlcmltZW50cy52MS5QYXVzZUV4cGVyaW1lbnRSZXNwb25zZRJlChBSZXN1bWVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuUmVzdW1lRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5SZXN1bWVFeHBlcmltZW50UmVzcG9uc2USXAoNRW5kRXhwZXJpbWVudBIkLmV4cGVyaW1lbnRzLnYxLkVuZEV4cGVyaW1lbnRSZXF1ZXN0GiUuZXhwZXJpbWVudHMudjEuRW5kRXhwZXJpbWVudFJlc3BvbnNlEnQKFUFwcGx5RXhwZXJpbWVudFdpbm5lchIsLmV4cGVyaW1lbnRzLnYxLkFwcGx5RXhwZXJpbWVudFdpbm5lclJlcXVlc3QaLS5leHBlcmltZW50cy52MS5BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRKPAQoeUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0EjUuZXhwZXJpbWVudHMudjEuUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVxdWVzdBo2LmV4cGVyaW1lbnRzLnYxLlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlc3BvbnNlEmsKElJvbGxiYWNrRXhwZXJpbWVudBIpLmV4cGVyaW1lbnRzLnYxLlJvbGxiYWNrRXhwZXJpbWVudFJlcXVlc3QaKi5leHBlcmltZW50cy52MS5Sb2xsYmFja0V4cGVyaW1lbnRSZXNwb25zZRJrChJHZXRFeHBlcmltZW50U3RhdHMSKS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50U3RhdHNSZXF1ZXN0GiouZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFN0YXRzUmVzcG9uc2USdAoVRm9yY2VBc3NpZ25FeHBlcmltZW50EiwuZXhwZXJpbWVudHMudjEuRm9yY2VBc3NpZ25FeHBlcmltZW50UmVxdWVzdBotLmV4cGVyaW1lbnRzLnYxLkZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEoMBChpSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudBIxLmV4cGVyaW1lbnRzLnYxLlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVxdWVzdBoyLmV4cGVyaW1lbnRzLnYxLlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVzcG9uc2USXwoOR2V0QXNzaWdubWVudHMSJS5leHBlcmltZW50cy52MS5HZXRBc3NpZ25tZW50c1JlcXVlc3QaJi5leHBlcmltZW50cy52MS5HZXRBc3NpZ25tZW50c1Jlc3BvbnNlEmIKD1Jlc29sdmVFeHBvc3VyZRImLmV4cGVyaW1lbnRzLnYxLlJlc29sdmVFeHBvc3VyZVJlcXVlc3QaJy5leHBlcmltZW50cy52MS5SZXNvbHZlRXhwb3N1cmVSZXNwb25zZRKDAQoaTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnMSMS5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1JlcXVlc3QaMi5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1Jlc3BvbnNlQkNaQWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9leHBlcmltZW50cy92MTtleHBlcmltZW50c3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
14
14
 
15
15
  /**
16
16
  * Describes the message experiments.v1.ExperimentTargeting.
@@ -40,243 +40,299 @@ export const ExperimentSchema = /*@__PURE__*/
40
40
  export const ExperimentAssignmentSchema = /*@__PURE__*/
41
41
  messageDesc(file_experiments_v1_experiments, 3);
42
42
 
43
+ /**
44
+ * Describes the message experiments.v1.ExperimentDeclaration.
45
+ * Use `create(ExperimentDeclarationSchema)` to create a new message.
46
+ */
47
+ export const ExperimentDeclarationSchema = /*@__PURE__*/
48
+ messageDesc(file_experiments_v1_experiments, 4);
49
+
43
50
  /**
44
51
  * Describes the message experiments.v1.VariantStats.
45
52
  * Use `create(VariantStatsSchema)` to create a new message.
46
53
  */
47
54
  export const VariantStatsSchema = /*@__PURE__*/
48
- messageDesc(file_experiments_v1_experiments, 4);
55
+ messageDesc(file_experiments_v1_experiments, 5);
49
56
 
50
57
  /**
51
58
  * Describes the message experiments.v1.ExperimentStats.
52
59
  * Use `create(ExperimentStatsSchema)` to create a new message.
53
60
  */
54
61
  export const ExperimentStatsSchema = /*@__PURE__*/
55
- messageDesc(file_experiments_v1_experiments, 5);
62
+ messageDesc(file_experiments_v1_experiments, 6);
56
63
 
57
64
  /**
58
65
  * Describes the message experiments.v1.CreateExperimentRequest.
59
66
  * Use `create(CreateExperimentRequestSchema)` to create a new message.
60
67
  */
61
68
  export const CreateExperimentRequestSchema = /*@__PURE__*/
62
- messageDesc(file_experiments_v1_experiments, 6);
69
+ messageDesc(file_experiments_v1_experiments, 7);
63
70
 
64
71
  /**
65
72
  * Describes the message experiments.v1.CreateExperimentResponse.
66
73
  * Use `create(CreateExperimentResponseSchema)` to create a new message.
67
74
  */
68
75
  export const CreateExperimentResponseSchema = /*@__PURE__*/
69
- messageDesc(file_experiments_v1_experiments, 7);
76
+ messageDesc(file_experiments_v1_experiments, 8);
70
77
 
71
78
  /**
72
79
  * Describes the message experiments.v1.GetExperimentRequest.
73
80
  * Use `create(GetExperimentRequestSchema)` to create a new message.
74
81
  */
75
82
  export const GetExperimentRequestSchema = /*@__PURE__*/
76
- messageDesc(file_experiments_v1_experiments, 8);
83
+ messageDesc(file_experiments_v1_experiments, 9);
77
84
 
78
85
  /**
79
86
  * Describes the message experiments.v1.GetExperimentResponse.
80
87
  * Use `create(GetExperimentResponseSchema)` to create a new message.
81
88
  */
82
89
  export const GetExperimentResponseSchema = /*@__PURE__*/
83
- messageDesc(file_experiments_v1_experiments, 9);
90
+ messageDesc(file_experiments_v1_experiments, 10);
84
91
 
85
92
  /**
86
93
  * Describes the message experiments.v1.GetExperimentByKeyRequest.
87
94
  * Use `create(GetExperimentByKeyRequestSchema)` to create a new message.
88
95
  */
89
96
  export const GetExperimentByKeyRequestSchema = /*@__PURE__*/
90
- messageDesc(file_experiments_v1_experiments, 10);
97
+ messageDesc(file_experiments_v1_experiments, 11);
91
98
 
92
99
  /**
93
100
  * Describes the message experiments.v1.GetExperimentByKeyResponse.
94
101
  * Use `create(GetExperimentByKeyResponseSchema)` to create a new message.
95
102
  */
96
103
  export const GetExperimentByKeyResponseSchema = /*@__PURE__*/
97
- messageDesc(file_experiments_v1_experiments, 11);
104
+ messageDesc(file_experiments_v1_experiments, 12);
98
105
 
99
106
  /**
100
107
  * Describes the message experiments.v1.ListExperimentsRequest.
101
108
  * Use `create(ListExperimentsRequestSchema)` to create a new message.
102
109
  */
103
110
  export const ListExperimentsRequestSchema = /*@__PURE__*/
104
- messageDesc(file_experiments_v1_experiments, 12);
111
+ messageDesc(file_experiments_v1_experiments, 13);
105
112
 
106
113
  /**
107
114
  * Describes the message experiments.v1.ListExperimentsResponse.
108
115
  * Use `create(ListExperimentsResponseSchema)` to create a new message.
109
116
  */
110
117
  export const ListExperimentsResponseSchema = /*@__PURE__*/
111
- messageDesc(file_experiments_v1_experiments, 13);
118
+ messageDesc(file_experiments_v1_experiments, 14);
112
119
 
113
120
  /**
114
121
  * Describes the message experiments.v1.UpdateExperimentRequest.
115
122
  * Use `create(UpdateExperimentRequestSchema)` to create a new message.
116
123
  */
117
124
  export const UpdateExperimentRequestSchema = /*@__PURE__*/
118
- messageDesc(file_experiments_v1_experiments, 14);
125
+ messageDesc(file_experiments_v1_experiments, 15);
119
126
 
120
127
  /**
121
128
  * Describes the message experiments.v1.UpdateExperimentResponse.
122
129
  * Use `create(UpdateExperimentResponseSchema)` to create a new message.
123
130
  */
124
131
  export const UpdateExperimentResponseSchema = /*@__PURE__*/
125
- messageDesc(file_experiments_v1_experiments, 15);
132
+ messageDesc(file_experiments_v1_experiments, 16);
126
133
 
127
134
  /**
128
135
  * Describes the message experiments.v1.DeleteExperimentRequest.
129
136
  * Use `create(DeleteExperimentRequestSchema)` to create a new message.
130
137
  */
131
138
  export const DeleteExperimentRequestSchema = /*@__PURE__*/
132
- messageDesc(file_experiments_v1_experiments, 16);
139
+ messageDesc(file_experiments_v1_experiments, 17);
133
140
 
134
141
  /**
135
142
  * Describes the message experiments.v1.DeleteExperimentResponse.
136
143
  * Use `create(DeleteExperimentResponseSchema)` to create a new message.
137
144
  */
138
145
  export const DeleteExperimentResponseSchema = /*@__PURE__*/
139
- messageDesc(file_experiments_v1_experiments, 17);
146
+ messageDesc(file_experiments_v1_experiments, 18);
140
147
 
141
148
  /**
142
149
  * Describes the message experiments.v1.StartExperimentRequest.
143
150
  * Use `create(StartExperimentRequestSchema)` to create a new message.
144
151
  */
145
152
  export const StartExperimentRequestSchema = /*@__PURE__*/
146
- messageDesc(file_experiments_v1_experiments, 18);
153
+ messageDesc(file_experiments_v1_experiments, 19);
147
154
 
148
155
  /**
149
156
  * Describes the message experiments.v1.StartExperimentResponse.
150
157
  * Use `create(StartExperimentResponseSchema)` to create a new message.
151
158
  */
152
159
  export const StartExperimentResponseSchema = /*@__PURE__*/
153
- messageDesc(file_experiments_v1_experiments, 19);
160
+ messageDesc(file_experiments_v1_experiments, 20);
154
161
 
155
162
  /**
156
163
  * Describes the message experiments.v1.PauseExperimentRequest.
157
164
  * Use `create(PauseExperimentRequestSchema)` to create a new message.
158
165
  */
159
166
  export const PauseExperimentRequestSchema = /*@__PURE__*/
160
- messageDesc(file_experiments_v1_experiments, 20);
167
+ messageDesc(file_experiments_v1_experiments, 21);
161
168
 
162
169
  /**
163
170
  * Describes the message experiments.v1.PauseExperimentResponse.
164
171
  * Use `create(PauseExperimentResponseSchema)` to create a new message.
165
172
  */
166
173
  export const PauseExperimentResponseSchema = /*@__PURE__*/
167
- messageDesc(file_experiments_v1_experiments, 21);
174
+ messageDesc(file_experiments_v1_experiments, 22);
168
175
 
169
176
  /**
170
177
  * Describes the message experiments.v1.ResumeExperimentRequest.
171
178
  * Use `create(ResumeExperimentRequestSchema)` to create a new message.
172
179
  */
173
180
  export const ResumeExperimentRequestSchema = /*@__PURE__*/
174
- messageDesc(file_experiments_v1_experiments, 22);
181
+ messageDesc(file_experiments_v1_experiments, 23);
175
182
 
176
183
  /**
177
184
  * Describes the message experiments.v1.ResumeExperimentResponse.
178
185
  * Use `create(ResumeExperimentResponseSchema)` to create a new message.
179
186
  */
180
187
  export const ResumeExperimentResponseSchema = /*@__PURE__*/
181
- messageDesc(file_experiments_v1_experiments, 23);
188
+ messageDesc(file_experiments_v1_experiments, 24);
182
189
 
183
190
  /**
184
191
  * Describes the message experiments.v1.EndExperimentRequest.
185
192
  * Use `create(EndExperimentRequestSchema)` to create a new message.
186
193
  */
187
194
  export const EndExperimentRequestSchema = /*@__PURE__*/
188
- messageDesc(file_experiments_v1_experiments, 24);
195
+ messageDesc(file_experiments_v1_experiments, 25);
189
196
 
190
197
  /**
191
198
  * Describes the message experiments.v1.EndExperimentResponse.
192
199
  * Use `create(EndExperimentResponseSchema)` to create a new message.
193
200
  */
194
201
  export const EndExperimentResponseSchema = /*@__PURE__*/
195
- messageDesc(file_experiments_v1_experiments, 25);
202
+ messageDesc(file_experiments_v1_experiments, 26);
196
203
 
197
204
  /**
198
205
  * Describes the message experiments.v1.GetExperimentStatsRequest.
199
206
  * Use `create(GetExperimentStatsRequestSchema)` to create a new message.
200
207
  */
201
208
  export const GetExperimentStatsRequestSchema = /*@__PURE__*/
202
- messageDesc(file_experiments_v1_experiments, 26);
209
+ messageDesc(file_experiments_v1_experiments, 27);
203
210
 
204
211
  /**
205
212
  * Describes the message experiments.v1.GetExperimentStatsResponse.
206
213
  * Use `create(GetExperimentStatsResponseSchema)` to create a new message.
207
214
  */
208
215
  export const GetExperimentStatsResponseSchema = /*@__PURE__*/
209
- messageDesc(file_experiments_v1_experiments, 27);
216
+ messageDesc(file_experiments_v1_experiments, 28);
210
217
 
211
218
  /**
212
219
  * Describes the message experiments.v1.ForceAssignExperimentRequest.
213
220
  * Use `create(ForceAssignExperimentRequestSchema)` to create a new message.
214
221
  */
215
222
  export const ForceAssignExperimentRequestSchema = /*@__PURE__*/
216
- messageDesc(file_experiments_v1_experiments, 28);
223
+ messageDesc(file_experiments_v1_experiments, 29);
217
224
 
218
225
  /**
219
226
  * Describes the message experiments.v1.ForceAssignExperimentResponse.
220
227
  * Use `create(ForceAssignExperimentResponseSchema)` to create a new message.
221
228
  */
222
229
  export const ForceAssignExperimentResponseSchema = /*@__PURE__*/
223
- messageDesc(file_experiments_v1_experiments, 29);
230
+ messageDesc(file_experiments_v1_experiments, 30);
224
231
 
225
232
  /**
226
233
  * Describes the message experiments.v1.RemoveExperimentAssignmentRequest.
227
234
  * Use `create(RemoveExperimentAssignmentRequestSchema)` to create a new message.
228
235
  */
229
236
  export const RemoveExperimentAssignmentRequestSchema = /*@__PURE__*/
230
- messageDesc(file_experiments_v1_experiments, 30);
237
+ messageDesc(file_experiments_v1_experiments, 31);
231
238
 
232
239
  /**
233
240
  * Describes the message experiments.v1.RemoveExperimentAssignmentResponse.
234
241
  * Use `create(RemoveExperimentAssignmentResponseSchema)` to create a new message.
235
242
  */
236
243
  export const RemoveExperimentAssignmentResponseSchema = /*@__PURE__*/
237
- messageDesc(file_experiments_v1_experiments, 31);
244
+ messageDesc(file_experiments_v1_experiments, 32);
238
245
 
239
246
  /**
240
247
  * Describes the message experiments.v1.ApplyExperimentWinnerRequest.
241
248
  * Use `create(ApplyExperimentWinnerRequestSchema)` to create a new message.
242
249
  */
243
250
  export const ApplyExperimentWinnerRequestSchema = /*@__PURE__*/
244
- messageDesc(file_experiments_v1_experiments, 32);
251
+ messageDesc(file_experiments_v1_experiments, 33);
245
252
 
246
253
  /**
247
254
  * Describes the message experiments.v1.ApplyExperimentWinnerResponse.
248
255
  * Use `create(ApplyExperimentWinnerResponseSchema)` to create a new message.
249
256
  */
250
257
  export const ApplyExperimentWinnerResponseSchema = /*@__PURE__*/
251
- messageDesc(file_experiments_v1_experiments, 33);
258
+ messageDesc(file_experiments_v1_experiments, 34);
252
259
 
253
260
  /**
254
- * Describes the message experiments.v1.GetCustomerAssignmentsRequest.
255
- * Use `create(GetCustomerAssignmentsRequestSchema)` to create a new message.
261
+ * Describes the message experiments.v1.PreviewExperimentWinnerRolloutRequest.
262
+ * Use `create(PreviewExperimentWinnerRolloutRequestSchema)` to create a new message.
256
263
  */
257
- export const GetCustomerAssignmentsRequestSchema = /*@__PURE__*/
258
- messageDesc(file_experiments_v1_experiments, 34);
264
+ export const PreviewExperimentWinnerRolloutRequestSchema = /*@__PURE__*/
265
+ messageDesc(file_experiments_v1_experiments, 35);
259
266
 
260
267
  /**
261
- * Describes the message experiments.v1.GetCustomerAssignmentsResponse.
262
- * Use `create(GetCustomerAssignmentsResponseSchema)` to create a new message.
268
+ * Describes the message experiments.v1.AffectedRecord.
269
+ * Use `create(AffectedRecordSchema)` to create a new message.
263
270
  */
264
- export const GetCustomerAssignmentsResponseSchema = /*@__PURE__*/
265
- messageDesc(file_experiments_v1_experiments, 35);
271
+ export const AffectedRecordSchema = /*@__PURE__*/
272
+ messageDesc(file_experiments_v1_experiments, 36);
273
+
274
+ /**
275
+ * Describes the message experiments.v1.PreviewExperimentWinnerRolloutResponse.
276
+ * Use `create(PreviewExperimentWinnerRolloutResponseSchema)` to create a new message.
277
+ */
278
+ export const PreviewExperimentWinnerRolloutResponseSchema = /*@__PURE__*/
279
+ messageDesc(file_experiments_v1_experiments, 37);
280
+
281
+ /**
282
+ * Describes the message experiments.v1.RollbackExperimentRequest.
283
+ * Use `create(RollbackExperimentRequestSchema)` to create a new message.
284
+ */
285
+ export const RollbackExperimentRequestSchema = /*@__PURE__*/
286
+ messageDesc(file_experiments_v1_experiments, 38);
287
+
288
+ /**
289
+ * Describes the message experiments.v1.RollbackExperimentResponse.
290
+ * Use `create(RollbackExperimentResponseSchema)` to create a new message.
291
+ */
292
+ export const RollbackExperimentResponseSchema = /*@__PURE__*/
293
+ messageDesc(file_experiments_v1_experiments, 39);
294
+
295
+ /**
296
+ * Describes the message experiments.v1.GetAssignmentsRequest.
297
+ * Use `create(GetAssignmentsRequestSchema)` to create a new message.
298
+ */
299
+ export const GetAssignmentsRequestSchema = /*@__PURE__*/
300
+ messageDesc(file_experiments_v1_experiments, 40);
301
+
302
+ /**
303
+ * Describes the message experiments.v1.GetAssignmentsResponse.
304
+ * Use `create(GetAssignmentsResponseSchema)` to create a new message.
305
+ */
306
+ export const GetAssignmentsResponseSchema = /*@__PURE__*/
307
+ messageDesc(file_experiments_v1_experiments, 41);
308
+
309
+ /**
310
+ * Describes the message experiments.v1.ListExperimentDeclarationsRequest.
311
+ * Use `create(ListExperimentDeclarationsRequestSchema)` to create a new message.
312
+ */
313
+ export const ListExperimentDeclarationsRequestSchema = /*@__PURE__*/
314
+ messageDesc(file_experiments_v1_experiments, 42);
315
+
316
+ /**
317
+ * Describes the message experiments.v1.ListExperimentDeclarationsResponse.
318
+ * Use `create(ListExperimentDeclarationsResponseSchema)` to create a new message.
319
+ */
320
+ export const ListExperimentDeclarationsResponseSchema = /*@__PURE__*/
321
+ messageDesc(file_experiments_v1_experiments, 43);
266
322
 
267
323
  /**
268
324
  * Describes the message experiments.v1.ResolveExposureRequest.
269
325
  * Use `create(ResolveExposureRequestSchema)` to create a new message.
270
326
  */
271
327
  export const ResolveExposureRequestSchema = /*@__PURE__*/
272
- messageDesc(file_experiments_v1_experiments, 36);
328
+ messageDesc(file_experiments_v1_experiments, 44);
273
329
 
274
330
  /**
275
331
  * Describes the message experiments.v1.ResolveExposureResponse.
276
332
  * Use `create(ResolveExposureResponseSchema)` to create a new message.
277
333
  */
278
334
  export const ResolveExposureResponseSchema = /*@__PURE__*/
279
- messageDesc(file_experiments_v1_experiments, 37);
335
+ messageDesc(file_experiments_v1_experiments, 45);
280
336
 
281
337
  /**
282
338
  * Describes the enum experiments.v1.ExperimentStatus.
@@ -1180,6 +1180,17 @@ export declare type UpdateVariantRequest = Message<"records.v1.UpdateVariantRequ
1180
1180
  * @generated from field: google.protobuf.Struct data = 2;
1181
1181
  */
1182
1182
  data?: JsonObject | undefined;
1183
+
1184
+ /**
1185
+ * Patch merged into the variant's metadata jsonb (deep-merge at the
1186
+ * top-level keys). Used to set per-variant binding fields such as
1187
+ * experimentKey / variantKey that the resolve path reads off the
1188
+ * variant row's metadata. Pass only the keys you want to set; existing
1189
+ * keys not in the patch are preserved.
1190
+ *
1191
+ * @generated from field: optional google.protobuf.Struct metadata_patch = 3;
1192
+ */
1193
+ metadataPatch?: JsonObject | undefined;
1183
1194
  };
1184
1195
 
1185
1196
  /**
@@ -10,7 +10,7 @@ import { file_expressions_v1_expressions } from "../../expressions/v1/expression
10
10
  * Describes the file records/v1/records.proto.
11
11
  */
12
12
  export const file_records_v1_records = /*@__PURE__*/
13
- fileDesc("ChhyZWNvcmRzL3YxL3JlY29yZHMucHJvdG8SCnJlY29yZHMudjEihA0KBlJlY29yZBIKCgJpZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSGAoLbmF0dXJhbF9rZXkYAyABKAlIAIgBARIWCglwYXJlbnRfaWQYBCABKAlIAYgBARIrCgtyZWNvcmRfdHlwZRgFIAEoDjIWLnJlY29yZHMudjEuUmVjb3JkVHlwZRIlCgRkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCghtZXRhZGF0YRgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBARIYCgtjdXN0b21lcl9pZBgIIAEoCUgDiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEhcKCmNyZWF0ZWRfYnkYFCABKAlIBIgBARIXCgp1cGRhdGVkX2J5GBUgASgJSAWIAQESLgoKY3JlYXRlZF9hdBgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoOdmVyc2lvbl9udW1iZXIYKCABKAVIBogBARIZCgxjb250ZW50X2hhc2gYKSABKAlIB4gBARIfChJjaGFuZ2VfZGVzY3JpcHRpb24YKiABKAlICIgBARIbCg5wdWJsaXNoX3N0YXR1cxgrIAEoCUgJiAEBEj0KFHNjaGVkdWxlZF9wdWJsaXNoX2F0GCwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgKiAEBEj8KFnNjaGVkdWxlZF91bnB1Ymxpc2hfYXQYLSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAuIAQESGAoLdmFyaWFudF9rZXkYMiABKAlIDIgBARIZCgx2YXJpYW50X25hbWUYMyABKAlIDYgBARIgChN2YXJpYW50X2Rlc2NyaXB0aW9uGDQgASgJSA6IAQESFwoKY2F0YWxvZ19pZBg1IAEoCUgPiAEBEhUKCHByaW9yaXR5GDYgASgFSBCIAQESPAoPdGFyZ2V0aW5nX3J1bGVzGDcgASgLMh4uZXhwcmVzc2lvbnMudjEuUnVsZUV4cHJlc3Npb25IEYgBARIXCgppc19kZWZhdWx0GDggASgISBKIAQESHwoSY3VycmVudF92ZXJzaW9uX2lkGDwgASgJSBOIAQESIQoUcHVibGlzaGVkX3ZlcnNpb25faWQYPSABKAlIFIgBARIlChhwdWJsaXNoZWRfdmVyc2lvbl9udW1iZXIYPiABKAVIFYgBARI1CgxwdWJsaXNoZWRfYXQYPyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSBaIAQESGQoMcHVibGlzaGVkX2J5GEAgASgJSBeIAQESEwoLY2FuX3B1Ymxpc2gYQSABKAgSFQoNY2FuX3VucHVibGlzaBhCIAEoCBIfChdoYXNfdW5wdWJsaXNoZWRfY2hhbmdlcxhDIAEoCBIdChBtb2RlbF92ZXJzaW9uX2lkGEYgASgJSBiIAQFCDgoMX25hdHVyYWxfa2V5QgwKCl9wYXJlbnRfaWRCCwoJX21ldGFkYXRhQg4KDF9jdXN0b21lcl9pZEINCgtfY3JlYXRlZF9ieUINCgtfdXBkYXRlZF9ieUIRCg9fdmVyc2lvbl9udW1iZXJCDwoNX2NvbnRlbnRfaGFzaEIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uQhEKD19wdWJsaXNoX3N0YXR1c0IXChVfc2NoZWR1bGVkX3B1Ymxpc2hfYXRCGQoXX3NjaGVkdWxlZF91bnB1Ymxpc2hfYXRCDgoMX3ZhcmlhbnRfa2V5Qg8KDV92YXJpYW50X25hbWVCFgoUX3ZhcmlhbnRfZGVzY3JpcHRpb25CDQoLX2NhdGFsb2dfaWRCCwoJX3ByaW9yaXR5QhIKEF90YXJnZXRpbmdfcnVsZXNCDQoLX2lzX2RlZmF1bHRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIXChVfcHVibGlzaGVkX3ZlcnNpb25faWRCGwoZX3B1Ymxpc2hlZF92ZXJzaW9uX251bWJlckIPCg1fcHVibGlzaGVkX2F0Qg8KDV9wdWJsaXNoZWRfYnlCEwoRX21vZGVsX3ZlcnNpb25faWQi9QEKD1B1Ymxpc2hTY2hlZHVsZRISCgp2ZXJzaW9uX2lkGAEgASgJEi4KCnB1Ymxpc2hfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjUKDHVucHVibGlzaF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCgpjcmVhdGVkX2J5GAUgASgJSAGIAQFCDwoNX3VucHVibGlzaF9hdEINCgtfY3JlYXRlZF9ieSJWCgxSZWNvcmRGaWx0ZXISDQoFZmllbGQYASABKAkSEAoIb3BlcmF0b3IYAiABKAkSJQoFdmFsdWUYAyABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiLgoJU29ydEZpZWxkEg0KBWZpZWxkGAEgASgJEhIKCmRlc2NlbmRpbmcYAiABKAgihQIKDkJhdGNoT3BlcmF0aW9uEiwKBHR5cGUYASABKA4yHi5yZWNvcmRzLnYxLkJhdGNoT3BlcmF0aW9uVHlwZRIPCgJpZBgCIAEoCUgAiAEBEhYKCW1vZGVsX2tleRgDIAEoCUgBiAEBEhgKC25hdHVyYWxfa2V5GAQgASgJSAKIAQESKgoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIYCgtjdXN0b21lcl9pZBgGIAEoCUgEiAEBQgUKA19pZEIMCgpfbW9kZWxfa2V5Qg4KDF9uYXR1cmFsX2tleUIHCgVfZGF0YUIOCgxfY3VzdG9tZXJfaWQiiAEKFEJhdGNoT3BlcmF0aW9uUmVzdWx0Eg0KBWluZGV4GAEgASgFEg8KB3N1Y2Nlc3MYAiABKAgSJwoGcmVjb3JkGAMgASgLMhIucmVjb3Jkcy52MS5SZWNvcmRIAIgBARISCgVlcnJvchgEIAEoCUgBiAEBQgkKB19yZWNvcmRCCAoGX2Vycm9yIpgCChNDcmVhdGVSZWNvcmRSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRIYCgtuYXR1cmFsX2tleRgCIAEoCUgAiAEBEiUKBGRhdGEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhgKC2N1c3RvbWVyX2lkGAQgASgJSAGIAQESLgoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SAKIAQESHwoSY2hhbmdlX2Rlc2NyaXB0aW9uGAYgASgJSAOIAQFCDgoMX25hdHVyYWxfa2V5Qg4KDF9jdXN0b21lcl9pZEILCglfbWV0YWRhdGFCFQoTX2NoYW5nZV9kZXNjcmlwdGlvbiKmAQoUQ3JlYXRlUmVjb3JkUmVzcG9uc2USIgoGcmVjb3JkGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQSKAoHdmFyaWFudBgCIAEoCzISLnJlY29yZHMudjEuUmVjb3JkSACIAQESKAoHdmVyc2lvbhgDIAEoCzISLnJlY29yZHMudjEuUmVjb3JkSAGIAQFCCgoIX3ZhcmlhbnRCCgoIX3ZlcnNpb24iHgoQR2V0UmVjb3JkUmVxdWVzdBIKCgJpZBgBIAEoCSI3ChFHZXRSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCI/ChVHZXRSZWNvcmRCeUtleVJlcXVlc3QSEQoJbW9kZWxfa2V5GAEgASgJEhMKC25hdHVyYWxfa2V5GAIgASgJIjwKFkdldFJlY29yZEJ5S2V5UmVzcG9uc2USIgoGcmVjb3JkGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiQgoZR2V0UmVjb3JkQnlLZXlPcklkUmVxdWVzdBIRCgltb2RlbF9rZXkYASABKAkSEgoKaWRlbnRpZmllchgCIAEoCSJAChpHZXRSZWNvcmRCeUtleU9ySWRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCLxAQoSTGlzdFJlY29yZHNSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUSKQoHZmlsdGVycxgEIAMoCzIYLnJlY29yZHMudjEuUmVjb3JkRmlsdGVyEiMKBHNvcnQYBSADKAsyFS5yZWNvcmRzLnYxLlNvcnRGaWVsZBIYCgtjdXN0b21lcl9pZBgGIAEoCUgAiAEBEhMKBnNlYXJjaBgHIAEoCUgBiAEBEg8KB3ByZXZpZXcYCCABKAhCDgoMX2N1c3RvbWVyX2lkQgkKB19zZWFyY2giSQoTTGlzdFJlY29yZHNSZXNwb25zZRIjCgdyZWNvcmRzGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQSDQoFdG90YWwYAiABKAUicgoTVXBkYXRlUmVjb3JkUmVxdWVzdBIKCgJpZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIYCgtuYXR1cmFsX2tleRgDIAEoCUgAiAEBQg4KDF9uYXR1cmFsX2tleSI6ChRVcGRhdGVSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCIhChNEZWxldGVSZWNvcmRSZXF1ZXN0EgoKAmlkGAEgASgJIicKFERlbGV0ZVJlY29yZFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgipwEKE1Vwc2VydFJlY29yZFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEQoJbW9kZWxfa2V5GAMgASgJEhMKC25hdHVyYWxfa2V5GAQgASgJEiUKBGRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhoKEmNoYW5nZV9kZXNjcmlwdGlvbhgGIAEoCSJLChRVcHNlcnRSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZBIPCgdjcmVhdGVkGAIgASgIIk4KHEJhdGNoUmVjb3JkT3BlcmF0aW9uc1JlcXVlc3QSLgoKb3BlcmF0aW9ucxgBIAMoCzIaLnJlY29yZHMudjEuQmF0Y2hPcGVyYXRpb24iUgodQmF0Y2hSZWNvcmRPcGVyYXRpb25zUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIgLnJlY29yZHMudjEuQmF0Y2hPcGVyYXRpb25SZXN1bHQifgoYQnVsa1VwZGF0ZVJlY29yZHNSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRIoCgZmaWx0ZXIYAiADKAsyGC5yZWNvcmRzLnYxLlJlY29yZEZpbHRlchIlCgRkYXRhGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCIqChlCdWxrVXBkYXRlUmVjb3Jkc1Jlc3BvbnNlEg0KBWNvdW50GAEgASgFIlYKFkR1cGxpY2F0ZVJlY29yZFJlcXVlc3QSCgoCaWQYASABKAkSHAoPbmV3X25hdHVyYWxfa2V5GAIgASgJSACIAQFCEgoQX25ld19uYXR1cmFsX2tleSI9ChdEdXBsaWNhdGVSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJQChtEdXBsaWNhdGVSZWNvcmRzQnVsa1JlcXVlc3QSCwoDaWRzGAEgAygJEhYKCW1vZGVsX2tleRgCIAEoCUgAiAEBQgwKCl9tb2RlbF9rZXkiQwocRHVwbGljYXRlUmVjb3Jkc0J1bGtSZXNwb25zZRIjCgdyZWNvcmRzGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQiiAEKFENyZWF0ZVZlcnNpb25SZXF1ZXN0EhEKCXBhcmVudF9pZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIfChJjaGFuZ2VfZGVzY3JpcHRpb24YAyABKAlIAIgBAUIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uIjwKFUNyZWF0ZVZlcnNpb25SZXNwb25zZRIjCgd2ZXJzaW9uGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiKwoVUHVibGlzaFZlcnNpb25SZXF1ZXN0EhIKCnZlcnNpb25faWQYASABKAkiPAoWUHVibGlzaFZlcnNpb25SZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCIrChZVbnB1Ymxpc2hSZWNvcmRSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCSIqChdVbnB1Ymxpc2hSZWNvcmRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIiwKFlJldmVydFRvVmVyc2lvblJlcXVlc3QSEgoKdmVyc2lvbl9pZBgBIAEoCSI9ChdSZXZlcnRUb1ZlcnNpb25SZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJNChlMaXN0UmVjb3JkVmVyc2lvbnNSZXF1ZXN0EhEKCXBhcmVudF9pZBgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiUQoaTGlzdFJlY29yZFZlcnNpb25zUmVzcG9uc2USJAoIdmVyc2lvbnMYASADKAsyEi5yZWNvcmRzLnYxLlJlY29yZBINCgV0b3RhbBgCIAEoBSJlChRDcmVhdGVWYXJpYW50UmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSJQoEZGF0YRgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiPAoVQ3JlYXRlVmFyaWFudFJlc3BvbnNlEiMKB3ZhcmlhbnQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJRChRVcGRhdGVWYXJpYW50UmVxdWVzdBISCgp2YXJpYW50X2lkGAEgASgJEiUKBGRhdGEYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IjwKFVVwZGF0ZVZhcmlhbnRSZXNwb25zZRIjCgd2YXJpYW50GAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiKgoURGVsZXRlVmFyaWFudFJlcXVlc3QSEgoKdmFyaWFudF9pZBgBIAEoCSIoChVEZWxldGVWYXJpYW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJBChhTZXREZWZhdWx0VmFyaWFudFJlcXVlc3QSEQoJcmVjb3JkX2lkGAEgASgJEhIKCnZhcmlhbnRfaWQYAiABKAkiPwoZU2V0RGVmYXVsdFZhcmlhbnRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJNChlMaXN0UmVjb3JkVmFyaWFudHNSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiUQoaTGlzdFJlY29yZFZhcmlhbnRzUmVzcG9uc2USJAoIdmFyaWFudHMYASADKAsyEi5yZWNvcmRzLnYxLlJlY29yZBINCgV0b3RhbBgCIAEoBSKwAQoSU2F2ZUNvbnRlbnRSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIYCgt2YXJpYW50X2tleRgDIAEoCUgAiAEBEh8KEmNoYW5nZV9kZXNjcmlwdGlvbhgEIAEoCUgBiAEBQg4KDF92YXJpYW50X2tleUIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uIl4KE1NhdmVDb250ZW50UmVzcG9uc2USIgoGcmVjb3JkGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQSIwoHdmVyc2lvbhgCIAEoCzISLnJlY29yZHMudjEuUmVjb3JkIqoBChxTY2hlZHVsZVJlY29yZFB1Ymxpc2hSZXF1ZXN0EhIKCnZlcnNpb25faWQYASABKAkSLgoKcHVibGlzaF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNQoMdW5wdWJsaXNoX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQg8KDV91bnB1Ymxpc2hfYXQiRAodU2NoZWR1bGVSZWNvcmRQdWJsaXNoUmVzcG9uc2USIwoHdmVyc2lvbhgBIAEoCzISLnJlY29yZHMudjEuUmVjb3JkIjkKI0NhbmNlbFNjaGVkdWxlZFJlY29yZFB1Ymxpc2hSZXF1ZXN0EhIKCnZlcnNpb25faWQYASABKAkiSwokQ2FuY2VsU2NoZWR1bGVkUmVjb3JkUHVibGlzaFJlc3BvbnNlEiMKB3ZlcnNpb24YASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCLQAQodTGlzdFNjaGVkdWxlZFB1Ymxpc2hlc1JlcXVlc3QSLQoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIrCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARIWCgltb2RlbF9rZXkYAyABKAlIAogBARINCgVsaW1pdBgEIAEoBRIOCgZvZmZzZXQYBSABKAVCBwoFX2Zyb21CBQoDX3RvQgwKCl9tb2RlbF9rZXkiVQoeTGlzdFNjaGVkdWxlZFB1Ymxpc2hlc1Jlc3BvbnNlEiQKCHZlcnNpb25zGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQSDQoFdG90YWwYAiABKAUiMAoaR2V0U2NoZWR1bGVkUHVibGlzaFJlcXVlc3QSEgoKdmVyc2lvbl9pZBgBIAEoCSJMChtHZXRTY2hlZHVsZWRQdWJsaXNoUmVzcG9uc2USLQoIc2NoZWR1bGUYASABKAsyGy5yZWNvcmRzLnYxLlB1Ymxpc2hTY2hlZHVsZSJ/ChhMaXN0RHJhZnRWZXJzaW9uc1JlcXVlc3QSFgoJbW9kZWxfa2V5GAEgASgJSACIAQESEwoGc2VhcmNoGAIgASgJSAGIAQESDQoFbGltaXQYAyABKAUSDgoGb2Zmc2V0GAQgASgFQgwKCl9tb2RlbF9rZXlCCQoHX3NlYXJjaCJQChlMaXN0RHJhZnRWZXJzaW9uc1Jlc3BvbnNlEiQKCHZlcnNpb25zGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQSDQoFdG90YWwYAiABKAUiMgobQmF0Y2hQdWJsaXNoVmVyc2lvbnNSZXF1ZXN0EhMKC3ZlcnNpb25faWRzGAEgAygJIlwKHEJhdGNoUHVibGlzaFZlcnNpb25zUmVzcG9uc2USIwoHcmVjb3JkcxgBIAMoCzISLnJlY29yZHMudjEuUmVjb3JkEhcKD3B1Ymxpc2hlZF9jb3VudBgCIAEoBSJVChJFeHBlcmltZW50RXhwb3N1cmUSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEgoKaXNfY29udHJvbBgDIAEoCCLhAQoaQmF0Y2hSZXNvbHZlUmVjb3Jkc1JlcXVlc3QSEQoJbW9kZWxfa2V5GAEgASgJEhIKCnJlY29yZF9pZHMYAiADKAkSGAoLY3VzdG9tZXJfaWQYAyABKAlIAIgBARItCgdjb250ZXh0GAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgBiAEBEg8KB3ByZXZpZXcYBSABKAgSFwoKdmlld2VyX2tleRgGIAEoCUgCiAEBQg4KDF9jdXN0b21lcl9pZEIKCghfY29udGV4dEINCgtfdmlld2VyX2tleSJKChtCYXRjaFJlc29sdmVSZWNvcmRzUmVzcG9uc2USKwoHcmVjb3JkcxgBIAMoCzIaLnJlY29yZHMudjEuUmVzb2x2ZWRSZWNvcmQixwIKDlJlc29sdmVkUmVjb3JkEhEKCXJlY29yZF9pZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSGAoLbmF0dXJhbF9rZXkYAyABKAlIAIgBARIlCgRkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFwoKdmFyaWFudF9pZBgGIAEoCUgBiAEBEkAKE2V4cGVyaW1lbnRfZXhwb3N1cmUYByABKAsyHi5yZWNvcmRzLnYxLkV4cGVyaW1lbnRFeHBvc3VyZUgCiAEBEhEKCWhhc19kcmFmdBgIIAEoCEIOCgxfbmF0dXJhbF9rZXlCDQoLX3ZhcmlhbnRfaWRCFgoUX2V4cGVyaW1lbnRfZXhwb3N1cmUiLwoZTG9va3VwUmVjb3JkTW9kZWxzUmVxdWVzdBISCgpyZWNvcmRfaWRzGAEgAygJIjgKEFJlY29yZE1vZGVsRW50cnkSEQoJcmVjb3JkX2lkGAEgASgJEhEKCW1vZGVsX2tleRgCIAEoCSJLChpMb29rdXBSZWNvcmRNb2RlbHNSZXNwb25zZRItCgdlbnRyaWVzGAEgAygLMhwucmVjb3Jkcy52MS5SZWNvcmRNb2RlbEVudHJ5IkcKE0dsb2JhbFNlYXJjaFJlcXVlc3QSDQoFcXVlcnkYASABKAkSEgoKbW9kZWxfa2V5cxgCIAMoCRINCgVsaW1pdBgKIAEoBSKRAQoQU2VhcmNoUmVzdWx0SXRlbRIKCgJpZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSGAoLbmF0dXJhbF9rZXkYAyABKAlIAIgBARIlCgRkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBINCgVzY29yZRgFIAEoAUIOCgxfbmF0dXJhbF9rZXkiVAoUR2xvYmFsU2VhcmNoUmVzcG9uc2USLQoHcmVjb3JkcxgBIAMoCzIcLnJlY29yZHMudjEuU2VhcmNoUmVzdWx0SXRlbRINCgV0b3RhbBgCIAEoBSKhAQoORW1iZWRkaW5nU3RhdHMSEQoJbW9kZWxfa2V5GAEgASgJEhUKDXRvdGFsX3JlY29yZHMYAiABKAUSGAoQZW1iZWRkZWRfcmVjb3JkcxgDIAEoBRIXCg9wZW5kaW5nX3JlY29yZHMYBCABKAUSHQoQbGFzdF9lbWJlZGRlZF9hdBgFIAEoCUgAiAEBQhMKEV9sYXN0X2VtYmVkZGVkX2F0InUKD1JlY29yZEVtYmVkZGluZxIRCglyZWNvcmRfaWQYASABKAkSEQoJbW9kZWxfa2V5GAIgASgJEhIKCmRpbWVuc2lvbnMYAyABKAUSGAoLZW1iZWRkZWRfYXQYBCABKAlIAIgBAUIOCgxfZW1iZWRkZWRfYXQikwEKDVNpbWlsYXJSZWNvcmQSCgoCaWQYASABKAkSEQoJbW9kZWxfa2V5GAIgASgJEhgKC25hdHVyYWxfa2V5GAMgASgJSACIAQESJQoEZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSEgoKc2ltaWxhcml0eRgFIAEoAUIOCgxfbmF0dXJhbF9rZXkiQAoYR2V0RW1iZWRkaW5nU3RhdHNSZXF1ZXN0EhYKCW1vZGVsX2tleRgBIAEoCUgAiAEBQgwKCl9tb2RlbF9rZXkiRgoZR2V0RW1iZWRkaW5nU3RhdHNSZXNwb25zZRIpCgVzdGF0cxgBIAMoCzIaLnJlY29yZHMudjEuRW1iZWRkaW5nU3RhdHMiLwoaR2V0UmVjb3JkRW1iZWRkaW5nc1JlcXVlc3QSEQoJcmVjb3JkX2lkGAEgASgJIk4KG0dldFJlY29yZEVtYmVkZGluZ3NSZXNwb25zZRIvCgplbWJlZGRpbmdzGAEgAygLMhsucmVjb3Jkcy52MS5SZWNvcmRFbWJlZGRpbmciYwoZRmluZFNpbWlsYXJSZWNvcmRzUmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkSFgoJbW9kZWxfa2V5GAIgASgJSACIAQESDQoFbGltaXQYCiABKAVCDAoKX21vZGVsX2tleSJIChpGaW5kU2ltaWxhclJlY29yZHNSZXNwb25zZRIqCgdyZWNvcmRzGAEgAygLMhkucmVjb3Jkcy52MS5TaW1pbGFyUmVjb3JkIpsBChZXcml0ZUVtYmVkZGluZ3NSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCRIOCgZ2ZWN0b3IYAiADKAISEgoKZGltZW5zaW9ucxgDIAEoBRIVCghwcm92aWRlchgEIAEoCUgAiAEBEhcKCm1vZGVsX25hbWUYBSABKAlIAYgBAUILCglfcHJvdmlkZXJCDQoLX21vZGVsX25hbWUiKgoXV3JpdGVFbWJlZGRpbmdzUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCIsChdEZWxldGVFbWJlZGRpbmdzUmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkiKwoYRGVsZXRlRW1iZWRkaW5nc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiZAoXU2VhcmNoRW1iZWRkaW5nc1JlcXVlc3QSFAoMcXVlcnlfdmVjdG9yGAEgAygCEhYKCW1vZGVsX2tleRgCIAEoCUgAiAEBEg0KBWxpbWl0GAogASgFQgwKCl9tb2RlbF9rZXkiRgoYU2VhcmNoRW1iZWRkaW5nc1Jlc3BvbnNlEioKB3Jlc3VsdHMYASADKAsyGS5yZWNvcmRzLnYxLlNpbWlsYXJSZWNvcmQqcwoKUmVjb3JkVHlwZRIbChdSRUNPUkRfVFlQRV9VTlNQRUNJRklFRBAAEhYKElJFQ09SRF9UWVBFX1JFQ09SRBABEhcKE1JFQ09SRF9UWVBFX1ZBUklBTlQQAhIXChNSRUNPUkRfVFlQRV9WRVJTSU9OEAMqnQEKEkJhdGNoT3BlcmF0aW9uVHlwZRIkCiBCQVRDSF9PUEVSQVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEh8KG0JBVENIX09QRVJBVElPTl9UWVBFX0NSRUFURRABEh8KG0JBVENIX09QRVJBVElPTl9UWVBFX1VQREFURRACEh8KG0JBVENIX09QRVJBVElPTl9UWVBFX0RFTEVURRADMrEcCg5SZWNvcmRzU2VydmljZRJRCgxDcmVhdGVSZWNvcmQSHy5yZWNvcmRzLnYxLkNyZWF0ZVJlY29yZFJlcXVlc3QaIC5yZWNvcmRzLnYxLkNyZWF0ZVJlY29yZFJlc3BvbnNlEkgKCUdldFJlY29yZBIcLnJlY29yZHMudjEuR2V0UmVjb3JkUmVxdWVzdBodLnJlY29yZHMudjEuR2V0UmVjb3JkUmVzcG9uc2USVwoOR2V0UmVjb3JkQnlLZXkSIS5yZWNvcmRzLnYxLkdldFJlY29yZEJ5S2V5UmVxdWVzdBoiLnJlY29yZHMudjEuR2V0UmVjb3JkQnlLZXlSZXNwb25zZRJjChJHZXRSZWNvcmRCeUtleU9ySWQSJS5yZWNvcmRzLnYxLkdldFJlY29yZEJ5S2V5T3JJZFJlcXVlc3QaJi5yZWNvcmRzLnYxLkdldFJlY29yZEJ5S2V5T3JJZFJlc3BvbnNlEk4KC0xpc3RSZWNvcmRzEh4ucmVjb3Jkcy52MS5MaXN0UmVjb3Jkc1JlcXVlc3QaHy5yZWNvcmRzLnYxLkxpc3RSZWNvcmRzUmVzcG9uc2USUQoMVXBkYXRlUmVjb3JkEh8ucmVjb3Jkcy52MS5VcGRhdGVSZWNvcmRSZXF1ZXN0GiAucmVjb3Jkcy52MS5VcGRhdGVSZWNvcmRSZXNwb25zZRJRCgxVcHNlcnRSZWNvcmQSHy5yZWNvcmRzLnYxLlVwc2VydFJlY29yZFJlcXVlc3QaIC5yZWNvcmRzLnYxLlVwc2VydFJlY29yZFJlc3BvbnNlElEKDERlbGV0ZVJlY29yZBIfLnJlY29yZHMudjEuRGVsZXRlUmVjb3JkUmVxdWVzdBogLnJlY29yZHMudjEuRGVsZXRlUmVjb3JkUmVzcG9uc2USbAoVQmF0Y2hSZWNvcmRPcGVyYXRpb25zEigucmVjb3Jkcy52MS5CYXRjaFJlY29yZE9wZXJhdGlvbnNSZXF1ZXN0GikucmVjb3Jkcy52MS5CYXRjaFJlY29yZE9wZXJhdGlvbnNSZXNwb25zZRJgChFCdWxrVXBkYXRlUmVjb3JkcxIkLnJlY29yZHMudjEuQnVsa1VwZGF0ZVJlY29yZHNSZXF1ZXN0GiUucmVjb3Jkcy52MS5CdWxrVXBkYXRlUmVjb3Jkc1Jlc3BvbnNlEloKD0R1cGxpY2F0ZVJlY29yZBIiLnJlY29yZHMudjEuRHVwbGljYXRlUmVjb3JkUmVxdWVzdBojLnJlY29yZHMudjEuRHVwbGljYXRlUmVjb3JkUmVzcG9uc2USaQoURHVwbGljYXRlUmVjb3Jkc0J1bGsSJy5yZWNvcmRzLnYxLkR1cGxpY2F0ZVJlY29yZHNCdWxrUmVxdWVzdBooLnJlY29yZHMudjEuRHVwbGljYXRlUmVjb3Jkc0J1bGtSZXNwb25zZRJUCg1DcmVhdGVWZXJzaW9uEiAucmVjb3Jkcy52MS5DcmVhdGVWZXJzaW9uUmVxdWVzdBohLnJlY29yZHMudjEuQ3JlYXRlVmVyc2lvblJlc3BvbnNlElcKDlB1Ymxpc2hWZXJzaW9uEiEucmVjb3Jkcy52MS5QdWJsaXNoVmVyc2lvblJlcXVlc3QaIi5yZWNvcmRzLnYxLlB1Ymxpc2hWZXJzaW9uUmVzcG9uc2USWgoPVW5wdWJsaXNoUmVjb3JkEiIucmVjb3Jkcy52MS5VbnB1Ymxpc2hSZWNvcmRSZXF1ZXN0GiMucmVjb3Jkcy52MS5VbnB1Ymxpc2hSZWNvcmRSZXNwb25zZRJaCg9SZXZlcnRUb1ZlcnNpb24SIi5yZWNvcmRzLnYxLlJldmVydFRvVmVyc2lvblJlcXVlc3QaIy5yZWNvcmRzLnYxLlJldmVydFRvVmVyc2lvblJlc3BvbnNlEmMKEkxpc3RSZWNvcmRWZXJzaW9ucxIlLnJlY29yZHMudjEuTGlzdFJlY29yZFZlcnNpb25zUmVxdWVzdBomLnJlY29yZHMudjEuTGlzdFJlY29yZFZlcnNpb25zUmVzcG9uc2USTgoLU2F2ZUNvbnRlbnQSHi5yZWNvcmRzLnYxLlNhdmVDb250ZW50UmVxdWVzdBofLnJlY29yZHMudjEuU2F2ZUNvbnRlbnRSZXNwb25zZRJUCg1DcmVhdGVWYXJpYW50EiAucmVjb3Jkcy52MS5DcmVhdGVWYXJpYW50UmVxdWVzdBohLnJlY29yZHMudjEuQ3JlYXRlVmFyaWFudFJlc3BvbnNlElQKDVVwZGF0ZVZhcmlhbnQSIC5yZWNvcmRzLnYxLlVwZGF0ZVZhcmlhbnRSZXF1ZXN0GiEucmVjb3Jkcy52MS5VcGRhdGVWYXJpYW50UmVzcG9uc2USVAoNRGVsZXRlVmFyaWFudBIgLnJlY29yZHMudjEuRGVsZXRlVmFyaWFudFJlcXVlc3QaIS5yZWNvcmRzLnYxLkRlbGV0ZVZhcmlhbnRSZXNwb25zZRJgChFTZXREZWZhdWx0VmFyaWFudBIkLnJlY29yZHMudjEuU2V0RGVmYXVsdFZhcmlhbnRSZXF1ZXN0GiUucmVjb3Jkcy52MS5TZXREZWZhdWx0VmFyaWFudFJlc3BvbnNlEmMKEkxpc3RSZWNvcmRWYXJpYW50cxIlLnJlY29yZHMudjEuTGlzdFJlY29yZFZhcmlhbnRzUmVxdWVzdBomLnJlY29yZHMudjEuTGlzdFJlY29yZFZhcmlhbnRzUmVzcG9uc2USbAoVU2NoZWR1bGVSZWNvcmRQdWJsaXNoEigucmVjb3Jkcy52MS5TY2hlZHVsZVJlY29yZFB1Ymxpc2hSZXF1ZXN0GikucmVjb3Jkcy52MS5TY2hlZHVsZVJlY29yZFB1Ymxpc2hSZXNwb25zZRKBAQocQ2FuY2VsU2NoZWR1bGVkUmVjb3JkUHVibGlzaBIvLnJlY29yZHMudjEuQ2FuY2VsU2NoZWR1bGVkUmVjb3JkUHVibGlzaFJlcXVlc3QaMC5yZWNvcmRzLnYxLkNhbmNlbFNjaGVkdWxlZFJlY29yZFB1Ymxpc2hSZXNwb25zZRJvChZMaXN0U2NoZWR1bGVkUHVibGlzaGVzEikucmVjb3Jkcy52MS5MaXN0U2NoZWR1bGVkUHVibGlzaGVzUmVxdWVzdBoqLnJlY29yZHMudjEuTGlzdFNjaGVkdWxlZFB1Ymxpc2hlc1Jlc3BvbnNlEmYKE0dldFNjaGVkdWxlZFB1Ymxpc2gSJi5yZWNvcmRzLnYxLkdldFNjaGVkdWxlZFB1Ymxpc2hSZXF1ZXN0GicucmVjb3Jkcy52MS5HZXRTY2hlZHVsZWRQdWJsaXNoUmVzcG9uc2USYAoRTGlzdERyYWZ0VmVyc2lvbnMSJC5yZWNvcmRzLnYxLkxpc3REcmFmdFZlcnNpb25zUmVxdWVzdBolLnJlY29yZHMudjEuTGlzdERyYWZ0VmVyc2lvbnNSZXNwb25zZRJpChRCYXRjaFB1Ymxpc2hWZXJzaW9ucxInLnJlY29yZHMudjEuQmF0Y2hQdWJsaXNoVmVyc2lvbnNSZXF1ZXN0GigucmVjb3Jkcy52MS5CYXRjaFB1Ymxpc2hWZXJzaW9uc1Jlc3BvbnNlEmYKE0JhdGNoUmVzb2x2ZVJlY29yZHMSJi5yZWNvcmRzLnYxLkJhdGNoUmVzb2x2ZVJlY29yZHNSZXF1ZXN0GicucmVjb3Jkcy52MS5CYXRjaFJlc29sdmVSZWNvcmRzUmVzcG9uc2USYwoSTG9va3VwUmVjb3JkTW9kZWxzEiUucmVjb3Jkcy52MS5Mb29rdXBSZWNvcmRNb2RlbHNSZXF1ZXN0GiYucmVjb3Jkcy52MS5Mb29rdXBSZWNvcmRNb2RlbHNSZXNwb25zZRJRCgxHbG9iYWxTZWFyY2gSHy5yZWNvcmRzLnYxLkdsb2JhbFNlYXJjaFJlcXVlc3QaIC5yZWNvcmRzLnYxLkdsb2JhbFNlYXJjaFJlc3BvbnNlEmAKEUdldEVtYmVkZGluZ1N0YXRzEiQucmVjb3Jkcy52MS5HZXRFbWJlZGRpbmdTdGF0c1JlcXVlc3QaJS5yZWNvcmRzLnYxLkdldEVtYmVkZGluZ1N0YXRzUmVzcG9uc2USZgoTR2V0UmVjb3JkRW1iZWRkaW5ncxImLnJlY29yZHMudjEuR2V0UmVjb3JkRW1iZWRkaW5nc1JlcXVlc3QaJy5yZWNvcmRzLnYxLkdldFJlY29yZEVtYmVkZGluZ3NSZXNwb25zZRJjChJGaW5kU2ltaWxhclJlY29yZHMSJS5yZWNvcmRzLnYxLkZpbmRTaW1pbGFyUmVjb3Jkc1JlcXVlc3QaJi5yZWNvcmRzLnYxLkZpbmRTaW1pbGFyUmVjb3Jkc1Jlc3BvbnNlEloKD1dyaXRlRW1iZWRkaW5ncxIiLnJlY29yZHMudjEuV3JpdGVFbWJlZGRpbmdzUmVxdWVzdBojLnJlY29yZHMudjEuV3JpdGVFbWJlZGRpbmdzUmVzcG9uc2USXQoQRGVsZXRlRW1iZWRkaW5ncxIjLnJlY29yZHMudjEuRGVsZXRlRW1iZWRkaW5nc1JlcXVlc3QaJC5yZWNvcmRzLnYxLkRlbGV0ZUVtYmVkZGluZ3NSZXNwb25zZRJdChBTZWFyY2hFbWJlZGRpbmdzEiMucmVjb3Jkcy52MS5TZWFyY2hFbWJlZGRpbmdzUmVxdWVzdBokLnJlY29yZHMudjEuU2VhcmNoRW1iZWRkaW5nc1Jlc3BvbnNlQjtaOWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9yZWNvcmRzL3YxO3JlY29yZHN2MWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
13
+ fileDesc("ChhyZWNvcmRzL3YxL3JlY29yZHMucHJvdG8SCnJlY29yZHMudjEihA0KBlJlY29yZBIKCgJpZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSGAoLbmF0dXJhbF9rZXkYAyABKAlIAIgBARIWCglwYXJlbnRfaWQYBCABKAlIAYgBARIrCgtyZWNvcmRfdHlwZRgFIAEoDjIWLnJlY29yZHMudjEuUmVjb3JkVHlwZRIlCgRkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCghtZXRhZGF0YRgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBARIYCgtjdXN0b21lcl9pZBgIIAEoCUgDiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEhcKCmNyZWF0ZWRfYnkYFCABKAlIBIgBARIXCgp1cGRhdGVkX2J5GBUgASgJSAWIAQESLgoKY3JlYXRlZF9hdBgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoOdmVyc2lvbl9udW1iZXIYKCABKAVIBogBARIZCgxjb250ZW50X2hhc2gYKSABKAlIB4gBARIfChJjaGFuZ2VfZGVzY3JpcHRpb24YKiABKAlICIgBARIbCg5wdWJsaXNoX3N0YXR1cxgrIAEoCUgJiAEBEj0KFHNjaGVkdWxlZF9wdWJsaXNoX2F0GCwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgKiAEBEj8KFnNjaGVkdWxlZF91bnB1Ymxpc2hfYXQYLSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAuIAQESGAoLdmFyaWFudF9rZXkYMiABKAlIDIgBARIZCgx2YXJpYW50X25hbWUYMyABKAlIDYgBARIgChN2YXJpYW50X2Rlc2NyaXB0aW9uGDQgASgJSA6IAQESFwoKY2F0YWxvZ19pZBg1IAEoCUgPiAEBEhUKCHByaW9yaXR5GDYgASgFSBCIAQESPAoPdGFyZ2V0aW5nX3J1bGVzGDcgASgLMh4uZXhwcmVzc2lvbnMudjEuUnVsZUV4cHJlc3Npb25IEYgBARIXCgppc19kZWZhdWx0GDggASgISBKIAQESHwoSY3VycmVudF92ZXJzaW9uX2lkGDwgASgJSBOIAQESIQoUcHVibGlzaGVkX3ZlcnNpb25faWQYPSABKAlIFIgBARIlChhwdWJsaXNoZWRfdmVyc2lvbl9udW1iZXIYPiABKAVIFYgBARI1CgxwdWJsaXNoZWRfYXQYPyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSBaIAQESGQoMcHVibGlzaGVkX2J5GEAgASgJSBeIAQESEwoLY2FuX3B1Ymxpc2gYQSABKAgSFQoNY2FuX3VucHVibGlzaBhCIAEoCBIfChdoYXNfdW5wdWJsaXNoZWRfY2hhbmdlcxhDIAEoCBIdChBtb2RlbF92ZXJzaW9uX2lkGEYgASgJSBiIAQFCDgoMX25hdHVyYWxfa2V5QgwKCl9wYXJlbnRfaWRCCwoJX21ldGFkYXRhQg4KDF9jdXN0b21lcl9pZEINCgtfY3JlYXRlZF9ieUINCgtfdXBkYXRlZF9ieUIRCg9fdmVyc2lvbl9udW1iZXJCDwoNX2NvbnRlbnRfaGFzaEIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uQhEKD19wdWJsaXNoX3N0YXR1c0IXChVfc2NoZWR1bGVkX3B1Ymxpc2hfYXRCGQoXX3NjaGVkdWxlZF91bnB1Ymxpc2hfYXRCDgoMX3ZhcmlhbnRfa2V5Qg8KDV92YXJpYW50X25hbWVCFgoUX3ZhcmlhbnRfZGVzY3JpcHRpb25CDQoLX2NhdGFsb2dfaWRCCwoJX3ByaW9yaXR5QhIKEF90YXJnZXRpbmdfcnVsZXNCDQoLX2lzX2RlZmF1bHRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIXChVfcHVibGlzaGVkX3ZlcnNpb25faWRCGwoZX3B1Ymxpc2hlZF92ZXJzaW9uX251bWJlckIPCg1fcHVibGlzaGVkX2F0Qg8KDV9wdWJsaXNoZWRfYnlCEwoRX21vZGVsX3ZlcnNpb25faWQi9QEKD1B1Ymxpc2hTY2hlZHVsZRISCgp2ZXJzaW9uX2lkGAEgASgJEi4KCnB1Ymxpc2hfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjUKDHVucHVibGlzaF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCgpjcmVhdGVkX2J5GAUgASgJSAGIAQFCDwoNX3VucHVibGlzaF9hdEINCgtfY3JlYXRlZF9ieSJWCgxSZWNvcmRGaWx0ZXISDQoFZmllbGQYASABKAkSEAoIb3BlcmF0b3IYAiABKAkSJQoFdmFsdWUYAyABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiLgoJU29ydEZpZWxkEg0KBWZpZWxkGAEgASgJEhIKCmRlc2NlbmRpbmcYAiABKAgihQIKDkJhdGNoT3BlcmF0aW9uEiwKBHR5cGUYASABKA4yHi5yZWNvcmRzLnYxLkJhdGNoT3BlcmF0aW9uVHlwZRIPCgJpZBgCIAEoCUgAiAEBEhYKCW1vZGVsX2tleRgDIAEoCUgBiAEBEhgKC25hdHVyYWxfa2V5GAQgASgJSAKIAQESKgoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIYCgtjdXN0b21lcl9pZBgGIAEoCUgEiAEBQgUKA19pZEIMCgpfbW9kZWxfa2V5Qg4KDF9uYXR1cmFsX2tleUIHCgVfZGF0YUIOCgxfY3VzdG9tZXJfaWQiiAEKFEJhdGNoT3BlcmF0aW9uUmVzdWx0Eg0KBWluZGV4GAEgASgFEg8KB3N1Y2Nlc3MYAiABKAgSJwoGcmVjb3JkGAMgASgLMhIucmVjb3Jkcy52MS5SZWNvcmRIAIgBARISCgVlcnJvchgEIAEoCUgBiAEBQgkKB19yZWNvcmRCCAoGX2Vycm9yIpgCChNDcmVhdGVSZWNvcmRSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRIYCgtuYXR1cmFsX2tleRgCIAEoCUgAiAEBEiUKBGRhdGEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhgKC2N1c3RvbWVyX2lkGAQgASgJSAGIAQESLgoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SAKIAQESHwoSY2hhbmdlX2Rlc2NyaXB0aW9uGAYgASgJSAOIAQFCDgoMX25hdHVyYWxfa2V5Qg4KDF9jdXN0b21lcl9pZEILCglfbWV0YWRhdGFCFQoTX2NoYW5nZV9kZXNjcmlwdGlvbiKmAQoUQ3JlYXRlUmVjb3JkUmVzcG9uc2USIgoGcmVjb3JkGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQSKAoHdmFyaWFudBgCIAEoCzISLnJlY29yZHMudjEuUmVjb3JkSACIAQESKAoHdmVyc2lvbhgDIAEoCzISLnJlY29yZHMudjEuUmVjb3JkSAGIAQFCCgoIX3ZhcmlhbnRCCgoIX3ZlcnNpb24iHgoQR2V0UmVjb3JkUmVxdWVzdBIKCgJpZBgBIAEoCSI3ChFHZXRSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCI/ChVHZXRSZWNvcmRCeUtleVJlcXVlc3QSEQoJbW9kZWxfa2V5GAEgASgJEhMKC25hdHVyYWxfa2V5GAIgASgJIjwKFkdldFJlY29yZEJ5S2V5UmVzcG9uc2USIgoGcmVjb3JkGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiQgoZR2V0UmVjb3JkQnlLZXlPcklkUmVxdWVzdBIRCgltb2RlbF9rZXkYASABKAkSEgoKaWRlbnRpZmllchgCIAEoCSJAChpHZXRSZWNvcmRCeUtleU9ySWRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCLxAQoSTGlzdFJlY29yZHNSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUSKQoHZmlsdGVycxgEIAMoCzIYLnJlY29yZHMudjEuUmVjb3JkRmlsdGVyEiMKBHNvcnQYBSADKAsyFS5yZWNvcmRzLnYxLlNvcnRGaWVsZBIYCgtjdXN0b21lcl9pZBgGIAEoCUgAiAEBEhMKBnNlYXJjaBgHIAEoCUgBiAEBEg8KB3ByZXZpZXcYCCABKAhCDgoMX2N1c3RvbWVyX2lkQgkKB19zZWFyY2giSQoTTGlzdFJlY29yZHNSZXNwb25zZRIjCgdyZWNvcmRzGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQSDQoFdG90YWwYAiABKAUicgoTVXBkYXRlUmVjb3JkUmVxdWVzdBIKCgJpZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIYCgtuYXR1cmFsX2tleRgDIAEoCUgAiAEBQg4KDF9uYXR1cmFsX2tleSI6ChRVcGRhdGVSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCIhChNEZWxldGVSZWNvcmRSZXF1ZXN0EgoKAmlkGAEgASgJIicKFERlbGV0ZVJlY29yZFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgipwEKE1Vwc2VydFJlY29yZFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEQoJbW9kZWxfa2V5GAMgASgJEhMKC25hdHVyYWxfa2V5GAQgASgJEiUKBGRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhoKEmNoYW5nZV9kZXNjcmlwdGlvbhgGIAEoCSJLChRVcHNlcnRSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZBIPCgdjcmVhdGVkGAIgASgIIk4KHEJhdGNoUmVjb3JkT3BlcmF0aW9uc1JlcXVlc3QSLgoKb3BlcmF0aW9ucxgBIAMoCzIaLnJlY29yZHMudjEuQmF0Y2hPcGVyYXRpb24iUgodQmF0Y2hSZWNvcmRPcGVyYXRpb25zUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIgLnJlY29yZHMudjEuQmF0Y2hPcGVyYXRpb25SZXN1bHQifgoYQnVsa1VwZGF0ZVJlY29yZHNSZXF1ZXN0EhEKCW1vZGVsX2tleRgBIAEoCRIoCgZmaWx0ZXIYAiADKAsyGC5yZWNvcmRzLnYxLlJlY29yZEZpbHRlchIlCgRkYXRhGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCIqChlCdWxrVXBkYXRlUmVjb3Jkc1Jlc3BvbnNlEg0KBWNvdW50GAEgASgFIlYKFkR1cGxpY2F0ZVJlY29yZFJlcXVlc3QSCgoCaWQYASABKAkSHAoPbmV3X25hdHVyYWxfa2V5GAIgASgJSACIAQFCEgoQX25ld19uYXR1cmFsX2tleSI9ChdEdXBsaWNhdGVSZWNvcmRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJQChtEdXBsaWNhdGVSZWNvcmRzQnVsa1JlcXVlc3QSCwoDaWRzGAEgAygJEhYKCW1vZGVsX2tleRgCIAEoCUgAiAEBQgwKCl9tb2RlbF9rZXkiQwocRHVwbGljYXRlUmVjb3Jkc0J1bGtSZXNwb25zZRIjCgdyZWNvcmRzGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQiiAEKFENyZWF0ZVZlcnNpb25SZXF1ZXN0EhEKCXBhcmVudF9pZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIfChJjaGFuZ2VfZGVzY3JpcHRpb24YAyABKAlIAIgBAUIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uIjwKFUNyZWF0ZVZlcnNpb25SZXNwb25zZRIjCgd2ZXJzaW9uGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiKwoVUHVibGlzaFZlcnNpb25SZXF1ZXN0EhIKCnZlcnNpb25faWQYASABKAkiPAoWUHVibGlzaFZlcnNpb25SZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCIrChZVbnB1Ymxpc2hSZWNvcmRSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCSIqChdVbnB1Ymxpc2hSZWNvcmRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIiwKFlJldmVydFRvVmVyc2lvblJlcXVlc3QSEgoKdmVyc2lvbl9pZBgBIAEoCSI9ChdSZXZlcnRUb1ZlcnNpb25SZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCJNChlMaXN0UmVjb3JkVmVyc2lvbnNSZXF1ZXN0EhEKCXBhcmVudF9pZBgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiUQoaTGlzdFJlY29yZFZlcnNpb25zUmVzcG9uc2USJAoIdmVyc2lvbnMYASADKAsyEi5yZWNvcmRzLnYxLlJlY29yZBINCgV0b3RhbBgCIAEoBSJlChRDcmVhdGVWYXJpYW50UmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSJQoEZGF0YRgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiPAoVQ3JlYXRlVmFyaWFudFJlc3BvbnNlEiMKB3ZhcmlhbnQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCKaAQoUVXBkYXRlVmFyaWFudFJlcXVlc3QSEgoKdmFyaWFudF9pZBgBIAEoCRIlCgRkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBI0Cg5tZXRhZGF0YV9wYXRjaBgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIRCg9fbWV0YWRhdGFfcGF0Y2giPAoVVXBkYXRlVmFyaWFudFJlc3BvbnNlEiMKB3ZhcmlhbnQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZCIqChREZWxldGVWYXJpYW50UmVxdWVzdBISCgp2YXJpYW50X2lkGAEgASgJIigKFURlbGV0ZVZhcmlhbnRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIkEKGFNldERlZmF1bHRWYXJpYW50UmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkSEgoKdmFyaWFudF9pZBgCIAEoCSI/ChlTZXREZWZhdWx0VmFyaWFudFJlc3BvbnNlEiIKBnJlY29yZBgBIAEoCzISLnJlY29yZHMudjEuUmVjb3JkIk0KGUxpc3RSZWNvcmRWYXJpYW50c1JlcXVlc3QSEQoJcmVjb3JkX2lkGAEgASgJEg0KBWxpbWl0GAIgASgFEg4KBm9mZnNldBgDIAEoBSJRChpMaXN0UmVjb3JkVmFyaWFudHNSZXNwb25zZRIkCgh2YXJpYW50cxgBIAMoCzISLnJlY29yZHMudjEuUmVjb3JkEg0KBXRvdGFsGAIgASgFIrABChJTYXZlQ29udGVudFJlcXVlc3QSEQoJcmVjb3JkX2lkGAEgASgJEiUKBGRhdGEYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhgKC3ZhcmlhbnRfa2V5GAMgASgJSACIAQESHwoSY2hhbmdlX2Rlc2NyaXB0aW9uGAQgASgJSAGIAQFCDgoMX3ZhcmlhbnRfa2V5QhUKE19jaGFuZ2VfZGVzY3JpcHRpb24iXgoTU2F2ZUNvbnRlbnRSZXNwb25zZRIiCgZyZWNvcmQYASABKAsyEi5yZWNvcmRzLnYxLlJlY29yZBIjCgd2ZXJzaW9uGAIgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiqgEKHFNjaGVkdWxlUmVjb3JkUHVibGlzaFJlcXVlc3QSEgoKdmVyc2lvbl9pZBgBIAEoCRIuCgpwdWJsaXNoX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI1Cgx1bnB1Ymxpc2hfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQFCDwoNX3VucHVibGlzaF9hdCJECh1TY2hlZHVsZVJlY29yZFB1Ymxpc2hSZXNwb25zZRIjCgd2ZXJzaW9uGAEgASgLMhIucmVjb3Jkcy52MS5SZWNvcmQiOQojQ2FuY2VsU2NoZWR1bGVkUmVjb3JkUHVibGlzaFJlcXVlc3QSEgoKdmVyc2lvbl9pZBgBIAEoCSJLCiRDYW5jZWxTY2hlZHVsZWRSZWNvcmRQdWJsaXNoUmVzcG9uc2USIwoHdmVyc2lvbhgBIAEoCzISLnJlY29yZHMudjEuUmVjb3JkItABCh1MaXN0U2NoZWR1bGVkUHVibGlzaGVzUmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEhYKCW1vZGVsX2tleRgDIAEoCUgCiAEBEg0KBWxpbWl0GAQgASgFEg4KBm9mZnNldBgFIAEoBUIHCgVfZnJvbUIFCgNfdG9CDAoKX21vZGVsX2tleSJVCh5MaXN0U2NoZWR1bGVkUHVibGlzaGVzUmVzcG9uc2USJAoIdmVyc2lvbnMYASADKAsyEi5yZWNvcmRzLnYxLlJlY29yZBINCgV0b3RhbBgCIAEoBSIwChpHZXRTY2hlZHVsZWRQdWJsaXNoUmVxdWVzdBISCgp2ZXJzaW9uX2lkGAEgASgJIkwKG0dldFNjaGVkdWxlZFB1Ymxpc2hSZXNwb25zZRItCghzY2hlZHVsZRgBIAEoCzIbLnJlY29yZHMudjEuUHVibGlzaFNjaGVkdWxlIn8KGExpc3REcmFmdFZlcnNpb25zUmVxdWVzdBIWCgltb2RlbF9rZXkYASABKAlIAIgBARITCgZzZWFyY2gYAiABKAlIAYgBARINCgVsaW1pdBgDIAEoBRIOCgZvZmZzZXQYBCABKAVCDAoKX21vZGVsX2tleUIJCgdfc2VhcmNoIlAKGUxpc3REcmFmdFZlcnNpb25zUmVzcG9uc2USJAoIdmVyc2lvbnMYASADKAsyEi5yZWNvcmRzLnYxLlJlY29yZBINCgV0b3RhbBgCIAEoBSIyChtCYXRjaFB1Ymxpc2hWZXJzaW9uc1JlcXVlc3QSEwoLdmVyc2lvbl9pZHMYASADKAkiXAocQmF0Y2hQdWJsaXNoVmVyc2lvbnNSZXNwb25zZRIjCgdyZWNvcmRzGAEgAygLMhIucmVjb3Jkcy52MS5SZWNvcmQSFwoPcHVibGlzaGVkX2NvdW50GAIgASgFIlUKEkV4cGVyaW1lbnRFeHBvc3VyZRIWCg5leHBlcmltZW50X2tleRgBIAEoCRITCgt2YXJpYW50X2tleRgCIAEoCRISCgppc19jb250cm9sGAMgASgIIuEBChpCYXRjaFJlc29sdmVSZWNvcmRzUmVxdWVzdBIRCgltb2RlbF9rZXkYASABKAkSEgoKcmVjb3JkX2lkcxgCIAMoCRIYCgtjdXN0b21lcl9pZBgDIAEoCUgAiAEBEi0KB2NvbnRleHQYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SAGIAQESDwoHcHJldmlldxgFIAEoCBIXCgp2aWV3ZXJfa2V5GAYgASgJSAKIAQFCDgoMX2N1c3RvbWVyX2lkQgoKCF9jb250ZXh0Qg0KC192aWV3ZXJfa2V5IkoKG0JhdGNoUmVzb2x2ZVJlY29yZHNSZXNwb25zZRIrCgdyZWNvcmRzGAEgAygLMhoucmVjb3Jkcy52MS5SZXNvbHZlZFJlY29yZCLHAgoOUmVzb2x2ZWRSZWNvcmQSEQoJcmVjb3JkX2lkGAEgASgJEhEKCW1vZGVsX2tleRgCIAEoCRIYCgtuYXR1cmFsX2tleRgDIAEoCUgAiAEBEiUKBGRhdGEYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EikKCG1ldGFkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIXCgp2YXJpYW50X2lkGAYgASgJSAGIAQESQAoTZXhwZXJpbWVudF9leHBvc3VyZRgHIAEoCzIeLnJlY29yZHMudjEuRXhwZXJpbWVudEV4cG9zdXJlSAKIAQESEQoJaGFzX2RyYWZ0GAggASgIQg4KDF9uYXR1cmFsX2tleUINCgtfdmFyaWFudF9pZEIWChRfZXhwZXJpbWVudF9leHBvc3VyZSIvChlMb29rdXBSZWNvcmRNb2RlbHNSZXF1ZXN0EhIKCnJlY29yZF9pZHMYASADKAkiOAoQUmVjb3JkTW9kZWxFbnRyeRIRCglyZWNvcmRfaWQYASABKAkSEQoJbW9kZWxfa2V5GAIgASgJIksKGkxvb2t1cFJlY29yZE1vZGVsc1Jlc3BvbnNlEi0KB2VudHJpZXMYASADKAsyHC5yZWNvcmRzLnYxLlJlY29yZE1vZGVsRW50cnkiRwoTR2xvYmFsU2VhcmNoUmVxdWVzdBINCgVxdWVyeRgBIAEoCRISCgptb2RlbF9rZXlzGAIgAygJEg0KBWxpbWl0GAogASgFIpEBChBTZWFyY2hSZXN1bHRJdGVtEgoKAmlkGAEgASgJEhEKCW1vZGVsX2tleRgCIAEoCRIYCgtuYXR1cmFsX2tleRgDIAEoCUgAiAEBEiUKBGRhdGEYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eg0KBXNjb3JlGAUgASgBQg4KDF9uYXR1cmFsX2tleSJUChRHbG9iYWxTZWFyY2hSZXNwb25zZRItCgdyZWNvcmRzGAEgAygLMhwucmVjb3Jkcy52MS5TZWFyY2hSZXN1bHRJdGVtEg0KBXRvdGFsGAIgASgFIqEBCg5FbWJlZGRpbmdTdGF0cxIRCgltb2RlbF9rZXkYASABKAkSFQoNdG90YWxfcmVjb3JkcxgCIAEoBRIYChBlbWJlZGRlZF9yZWNvcmRzGAMgASgFEhcKD3BlbmRpbmdfcmVjb3JkcxgEIAEoBRIdChBsYXN0X2VtYmVkZGVkX2F0GAUgASgJSACIAQFCEwoRX2xhc3RfZW1iZWRkZWRfYXQidQoPUmVjb3JkRW1iZWRkaW5nEhEKCXJlY29yZF9pZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSEgoKZGltZW5zaW9ucxgDIAEoBRIYCgtlbWJlZGRlZF9hdBgEIAEoCUgAiAEBQg4KDF9lbWJlZGRlZF9hdCKTAQoNU2ltaWxhclJlY29yZBIKCgJpZBgBIAEoCRIRCgltb2RlbF9rZXkYAiABKAkSGAoLbmF0dXJhbF9rZXkYAyABKAlIAIgBARIlCgRkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBISCgpzaW1pbGFyaXR5GAUgASgBQg4KDF9uYXR1cmFsX2tleSJAChhHZXRFbWJlZGRpbmdTdGF0c1JlcXVlc3QSFgoJbW9kZWxfa2V5GAEgASgJSACIAQFCDAoKX21vZGVsX2tleSJGChlHZXRFbWJlZGRpbmdTdGF0c1Jlc3BvbnNlEikKBXN0YXRzGAEgAygLMhoucmVjb3Jkcy52MS5FbWJlZGRpbmdTdGF0cyIvChpHZXRSZWNvcmRFbWJlZGRpbmdzUmVxdWVzdBIRCglyZWNvcmRfaWQYASABKAkiTgobR2V0UmVjb3JkRW1iZWRkaW5nc1Jlc3BvbnNlEi8KCmVtYmVkZGluZ3MYASADKAsyGy5yZWNvcmRzLnYxLlJlY29yZEVtYmVkZGluZyJjChlGaW5kU2ltaWxhclJlY29yZHNSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCRIWCgltb2RlbF9rZXkYAiABKAlIAIgBARINCgVsaW1pdBgKIAEoBUIMCgpfbW9kZWxfa2V5IkgKGkZpbmRTaW1pbGFyUmVjb3Jkc1Jlc3BvbnNlEioKB3JlY29yZHMYASADKAsyGS5yZWNvcmRzLnYxLlNpbWlsYXJSZWNvcmQimwEKFldyaXRlRW1iZWRkaW5nc1JlcXVlc3QSEQoJcmVjb3JkX2lkGAEgASgJEg4KBnZlY3RvchgCIAMoAhISCgpkaW1lbnNpb25zGAMgASgFEhUKCHByb3ZpZGVyGAQgASgJSACIAQESFwoKbW9kZWxfbmFtZRgFIAEoCUgBiAEBQgsKCV9wcm92aWRlckINCgtfbW9kZWxfbmFtZSIqChdXcml0ZUVtYmVkZGluZ3NSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIiwKF0RlbGV0ZUVtYmVkZGluZ3NSZXF1ZXN0EhEKCXJlY29yZF9pZBgBIAEoCSIrChhEZWxldGVFbWJlZGRpbmdzUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJkChdTZWFyY2hFbWJlZGRpbmdzUmVxdWVzdBIUCgxxdWVyeV92ZWN0b3IYASADKAISFgoJbW9kZWxfa2V5GAIgASgJSACIAQESDQoFbGltaXQYCiABKAVCDAoKX21vZGVsX2tleSJGChhTZWFyY2hFbWJlZGRpbmdzUmVzcG9uc2USKgoHcmVzdWx0cxgBIAMoCzIZLnJlY29yZHMudjEuU2ltaWxhclJlY29yZCpzCgpSZWNvcmRUeXBlEhsKF1JFQ09SRF9UWVBFX1VOU1BFQ0lGSUVEEAASFgoSUkVDT1JEX1RZUEVfUkVDT1JEEAESFwoTUkVDT1JEX1RZUEVfVkFSSUFOVBACEhcKE1JFQ09SRF9UWVBFX1ZFUlNJT04QAyqdAQoSQmF0Y2hPcGVyYXRpb25UeXBlEiQKIEJBVENIX09QRVJBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASHwobQkFUQ0hfT1BFUkFUSU9OX1RZUEVfQ1JFQVRFEAESHwobQkFUQ0hfT1BFUkFUSU9OX1RZUEVfVVBEQVRFEAISHwobQkFUQ0hfT1BFUkFUSU9OX1RZUEVfREVMRVRFEAMysRwKDlJlY29yZHNTZXJ2aWNlElEKDENyZWF0ZVJlY29yZBIfLnJlY29yZHMudjEuQ3JlYXRlUmVjb3JkUmVxdWVzdBogLnJlY29yZHMudjEuQ3JlYXRlUmVjb3JkUmVzcG9uc2USSAoJR2V0UmVjb3JkEhwucmVjb3Jkcy52MS5HZXRSZWNvcmRSZXF1ZXN0Gh0ucmVjb3Jkcy52MS5HZXRSZWNvcmRSZXNwb25zZRJXCg5HZXRSZWNvcmRCeUtleRIhLnJlY29yZHMudjEuR2V0UmVjb3JkQnlLZXlSZXF1ZXN0GiIucmVjb3Jkcy52MS5HZXRSZWNvcmRCeUtleVJlc3BvbnNlEmMKEkdldFJlY29yZEJ5S2V5T3JJZBIlLnJlY29yZHMudjEuR2V0UmVjb3JkQnlLZXlPcklkUmVxdWVzdBomLnJlY29yZHMudjEuR2V0UmVjb3JkQnlLZXlPcklkUmVzcG9uc2USTgoLTGlzdFJlY29yZHMSHi5yZWNvcmRzLnYxLkxpc3RSZWNvcmRzUmVxdWVzdBofLnJlY29yZHMudjEuTGlzdFJlY29yZHNSZXNwb25zZRJRCgxVcGRhdGVSZWNvcmQSHy5yZWNvcmRzLnYxLlVwZGF0ZVJlY29yZFJlcXVlc3QaIC5yZWNvcmRzLnYxLlVwZGF0ZVJlY29yZFJlc3BvbnNlElEKDFVwc2VydFJlY29yZBIfLnJlY29yZHMudjEuVXBzZXJ0UmVjb3JkUmVxdWVzdBogLnJlY29yZHMudjEuVXBzZXJ0UmVjb3JkUmVzcG9uc2USUQoMRGVsZXRlUmVjb3JkEh8ucmVjb3Jkcy52MS5EZWxldGVSZWNvcmRSZXF1ZXN0GiAucmVjb3Jkcy52MS5EZWxldGVSZWNvcmRSZXNwb25zZRJsChVCYXRjaFJlY29yZE9wZXJhdGlvbnMSKC5yZWNvcmRzLnYxLkJhdGNoUmVjb3JkT3BlcmF0aW9uc1JlcXVlc3QaKS5yZWNvcmRzLnYxLkJhdGNoUmVjb3JkT3BlcmF0aW9uc1Jlc3BvbnNlEmAKEUJ1bGtVcGRhdGVSZWNvcmRzEiQucmVjb3Jkcy52MS5CdWxrVXBkYXRlUmVjb3Jkc1JlcXVlc3QaJS5yZWNvcmRzLnYxLkJ1bGtVcGRhdGVSZWNvcmRzUmVzcG9uc2USWgoPRHVwbGljYXRlUmVjb3JkEiIucmVjb3Jkcy52MS5EdXBsaWNhdGVSZWNvcmRSZXF1ZXN0GiMucmVjb3Jkcy52MS5EdXBsaWNhdGVSZWNvcmRSZXNwb25zZRJpChREdXBsaWNhdGVSZWNvcmRzQnVsaxInLnJlY29yZHMudjEuRHVwbGljYXRlUmVjb3Jkc0J1bGtSZXF1ZXN0GigucmVjb3Jkcy52MS5EdXBsaWNhdGVSZWNvcmRzQnVsa1Jlc3BvbnNlElQKDUNyZWF0ZVZlcnNpb24SIC5yZWNvcmRzLnYxLkNyZWF0ZVZlcnNpb25SZXF1ZXN0GiEucmVjb3Jkcy52MS5DcmVhdGVWZXJzaW9uUmVzcG9uc2USVwoOUHVibGlzaFZlcnNpb24SIS5yZWNvcmRzLnYxLlB1Ymxpc2hWZXJzaW9uUmVxdWVzdBoiLnJlY29yZHMudjEuUHVibGlzaFZlcnNpb25SZXNwb25zZRJaCg9VbnB1Ymxpc2hSZWNvcmQSIi5yZWNvcmRzLnYxLlVucHVibGlzaFJlY29yZFJlcXVlc3QaIy5yZWNvcmRzLnYxLlVucHVibGlzaFJlY29yZFJlc3BvbnNlEloKD1JldmVydFRvVmVyc2lvbhIiLnJlY29yZHMudjEuUmV2ZXJ0VG9WZXJzaW9uUmVxdWVzdBojLnJlY29yZHMudjEuUmV2ZXJ0VG9WZXJzaW9uUmVzcG9uc2USYwoSTGlzdFJlY29yZFZlcnNpb25zEiUucmVjb3Jkcy52MS5MaXN0UmVjb3JkVmVyc2lvbnNSZXF1ZXN0GiYucmVjb3Jkcy52MS5MaXN0UmVjb3JkVmVyc2lvbnNSZXNwb25zZRJOCgtTYXZlQ29udGVudBIeLnJlY29yZHMudjEuU2F2ZUNvbnRlbnRSZXF1ZXN0Gh8ucmVjb3Jkcy52MS5TYXZlQ29udGVudFJlc3BvbnNlElQKDUNyZWF0ZVZhcmlhbnQSIC5yZWNvcmRzLnYxLkNyZWF0ZVZhcmlhbnRSZXF1ZXN0GiEucmVjb3Jkcy52MS5DcmVhdGVWYXJpYW50UmVzcG9uc2USVAoNVXBkYXRlVmFyaWFudBIgLnJlY29yZHMudjEuVXBkYXRlVmFyaWFudFJlcXVlc3QaIS5yZWNvcmRzLnYxLlVwZGF0ZVZhcmlhbnRSZXNwb25zZRJUCg1EZWxldGVWYXJpYW50EiAucmVjb3Jkcy52MS5EZWxldGVWYXJpYW50UmVxdWVzdBohLnJlY29yZHMudjEuRGVsZXRlVmFyaWFudFJlc3BvbnNlEmAKEVNldERlZmF1bHRWYXJpYW50EiQucmVjb3Jkcy52MS5TZXREZWZhdWx0VmFyaWFudFJlcXVlc3QaJS5yZWNvcmRzLnYxLlNldERlZmF1bHRWYXJpYW50UmVzcG9uc2USYwoSTGlzdFJlY29yZFZhcmlhbnRzEiUucmVjb3Jkcy52MS5MaXN0UmVjb3JkVmFyaWFudHNSZXF1ZXN0GiYucmVjb3Jkcy52MS5MaXN0UmVjb3JkVmFyaWFudHNSZXNwb25zZRJsChVTY2hlZHVsZVJlY29yZFB1Ymxpc2gSKC5yZWNvcmRzLnYxLlNjaGVkdWxlUmVjb3JkUHVibGlzaFJlcXVlc3QaKS5yZWNvcmRzLnYxLlNjaGVkdWxlUmVjb3JkUHVibGlzaFJlc3BvbnNlEoEBChxDYW5jZWxTY2hlZHVsZWRSZWNvcmRQdWJsaXNoEi8ucmVjb3Jkcy52MS5DYW5jZWxTY2hlZHVsZWRSZWNvcmRQdWJsaXNoUmVxdWVzdBowLnJlY29yZHMudjEuQ2FuY2VsU2NoZWR1bGVkUmVjb3JkUHVibGlzaFJlc3BvbnNlEm8KFkxpc3RTY2hlZHVsZWRQdWJsaXNoZXMSKS5yZWNvcmRzLnYxLkxpc3RTY2hlZHVsZWRQdWJsaXNoZXNSZXF1ZXN0GioucmVjb3Jkcy52MS5MaXN0U2NoZWR1bGVkUHVibGlzaGVzUmVzcG9uc2USZgoTR2V0U2NoZWR1bGVkUHVibGlzaBImLnJlY29yZHMudjEuR2V0U2NoZWR1bGVkUHVibGlzaFJlcXVlc3QaJy5yZWNvcmRzLnYxLkdldFNjaGVkdWxlZFB1Ymxpc2hSZXNwb25zZRJgChFMaXN0RHJhZnRWZXJzaW9ucxIkLnJlY29yZHMudjEuTGlzdERyYWZ0VmVyc2lvbnNSZXF1ZXN0GiUucmVjb3Jkcy52MS5MaXN0RHJhZnRWZXJzaW9uc1Jlc3BvbnNlEmkKFEJhdGNoUHVibGlzaFZlcnNpb25zEicucmVjb3Jkcy52MS5CYXRjaFB1Ymxpc2hWZXJzaW9uc1JlcXVlc3QaKC5yZWNvcmRzLnYxLkJhdGNoUHVibGlzaFZlcnNpb25zUmVzcG9uc2USZgoTQmF0Y2hSZXNvbHZlUmVjb3JkcxImLnJlY29yZHMudjEuQmF0Y2hSZXNvbHZlUmVjb3Jkc1JlcXVlc3QaJy5yZWNvcmRzLnYxLkJhdGNoUmVzb2x2ZVJlY29yZHNSZXNwb25zZRJjChJMb29rdXBSZWNvcmRNb2RlbHMSJS5yZWNvcmRzLnYxLkxvb2t1cFJlY29yZE1vZGVsc1JlcXVlc3QaJi5yZWNvcmRzLnYxLkxvb2t1cFJlY29yZE1vZGVsc1Jlc3BvbnNlElEKDEdsb2JhbFNlYXJjaBIfLnJlY29yZHMudjEuR2xvYmFsU2VhcmNoUmVxdWVzdBogLnJlY29yZHMudjEuR2xvYmFsU2VhcmNoUmVzcG9uc2USYAoRR2V0RW1iZWRkaW5nU3RhdHMSJC5yZWNvcmRzLnYxLkdldEVtYmVkZGluZ1N0YXRzUmVxdWVzdBolLnJlY29yZHMudjEuR2V0RW1iZWRkaW5nU3RhdHNSZXNwb25zZRJmChNHZXRSZWNvcmRFbWJlZGRpbmdzEiYucmVjb3Jkcy52MS5HZXRSZWNvcmRFbWJlZGRpbmdzUmVxdWVzdBonLnJlY29yZHMudjEuR2V0UmVjb3JkRW1iZWRkaW5nc1Jlc3BvbnNlEmMKEkZpbmRTaW1pbGFyUmVjb3JkcxIlLnJlY29yZHMudjEuRmluZFNpbWlsYXJSZWNvcmRzUmVxdWVzdBomLnJlY29yZHMudjEuRmluZFNpbWlsYXJSZWNvcmRzUmVzcG9uc2USWgoPV3JpdGVFbWJlZGRpbmdzEiIucmVjb3Jkcy52MS5Xcml0ZUVtYmVkZGluZ3NSZXF1ZXN0GiMucmVjb3Jkcy52MS5Xcml0ZUVtYmVkZGluZ3NSZXNwb25zZRJdChBEZWxldGVFbWJlZGRpbmdzEiMucmVjb3Jkcy52MS5EZWxldGVFbWJlZGRpbmdzUmVxdWVzdBokLnJlY29yZHMudjEuRGVsZXRlRW1iZWRkaW5nc1Jlc3BvbnNlEl0KEFNlYXJjaEVtYmVkZGluZ3MSIy5yZWNvcmRzLnYxLlNlYXJjaEVtYmVkZGluZ3NSZXF1ZXN0GiQucmVjb3Jkcy52MS5TZWFyY2hFbWJlZGRpbmdzUmVzcG9uc2VCO1o5Z2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL3JlY29yZHMvdjE7cmVjb3Jkc3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
14
14
 
15
15
  /**
16
16
  * Describes the message records.v1.Record.